Sorry about that, the code should say:
Controller.Initialize("DSN=SentenceDB");
Now the good news, I found an interesting workaround when you mentioned the
static initializer. I took out all the "static" keywords from my controller
class and instantiated it inside the Test the plain old way: Controller c = new
Controller();
It works fine now!
What I'm wondering now is why can't I use "static" classes like I tried. I've
been doing it for ages without any problem - it's basically a singleton
pattern. In this example, I used it because I know my application will never
ever need to instantiate more than one Controller class.
Attaching the debugger was a good idea too. Here are more details regarding
the behavior:
- When I run with debugger attached to Mbunit gui there is no exception thrown
- When I run without debugger the exception is thrown the first time after the
assembly reloads in mbUnit (second time run is ok, it keeps working fine until
I press Assemblies->Reload)
I should probably repost this on the developer forum instead. It looks like
there is something different about the way mbUnit deals with static classes.
Thank you for your help.
[EMAIL PROTECTED] wrote:
> The test is calling Controller.Initialize with no args but the code you
> included only has a variant with 1 arg.
>
> I wonder if you have some kind of static initializer in there that might be
> causing trouble.
>
> Alternately, there might be some problem if there are other tests that affect
> the same static variables but that might run in a different order sometimes...
>
> Certainly weird. Have you tried running the test under the debugger?
> -----Original Message-----
> From: ixnaum <[EMAIL PROTECTED]>
> Date: Friday, Nov 21, 2008 4:16 pm
> Subject: MbUnit Weird database connection failure
> To: "MbUnit.User" <[email protected]>Reply-To:
> [email protected]
>
>
> Hello,
>
> I came across a really strange problem. I have to say that I'm
> relatively new to mbUnit so maybe I'm missing something obvious - but I had
> to post this because I just don't get it.
>
> I can sucessfully connect to ODBC database outside of MbUnit, but the same
> code fails (throws Mysql connect exception) when run inside
> MbUnit. What's even more strange is that if I rerun the same test
> with no code change the second time, there is no exception thrown.
> And that's not where the strangeness ends. If I comment "IList list =
> Controller.ColumnList;" the test will always succeed with no MySQL
> exception. If you look at that piece of code, it does nothing related with
> the database. It just returns an empty IList. The exception
> trace even says that it's not that line of code that's throwing the
> exception, it's the line above. That makes sense - but why in the
> heck does it work just fine when "IList list =" is commented out.
> Sorry if this post doesn't make sense ... the whole thing doesn't make sense.
>
> I should add that I had something similar happen to the same code when I used
> NUnit on it. I changed to MbUnit partly because I thought
> NUnit was messed up. Actually NUnit made a bit more sense, in NUnit, the
> MySQL exception was thrown every single time during
> Controller.Initialize() ... none of this: it-works-on-a-second-try-if-
> you-click-run-again
>
> Here is my test code:
> [Test]
> public void Test()
> {
>
> Controller.Initialize();
> IList list = Controller.ColumnList;
>
> //I know I don't have any assert code here, but I tried to keep
> the test to a minimum since it's behaving strange
>
> }
>
>
> Controller code:
>
> public class Controller
> {
> private static List<string> groupTaggedColumns = new
> List<string>();
> private static OdbcConnection connection;
>
> public static IList ColumnList
> {
> get
> {
> return groupTaggedColumns;
> }
> }
>
> public static void Initialize(string DSNstring)
> {
> connection = new OdbcConnection(DSNstring);
> connection.Open();
> }
> }
>
>
> Exception
> (BTW I'm not even connecting to localhost, my DSN is setup to connect to
> another host - again works fine with that line commented out):
>
>
> Message: ERROR [HY000] [MySQL][ODBC 5.1 Driver]Can't connect to MySQL server
> on 'localhost' (10061)
> ERROR [HY000] [MySQL][ODBC 5.1 Driver]Can't connect to MySQL server on
> 'localhost' (10061)
>
> Type: System.Data.Odbc.OdbcException
> Source:
> Errors: System.Data.Odbc.OdbcErrorCollection
> ErrorCode: -2146232009
> TargetSite: Void HandleError(System.Data.Odbc.OdbcHandle, RetCode)
> HelpLink: null
> Stack: at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle
> hrHandle, RetCode retcode)
> at System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection
> connection, OdbcConnectionString constr, OdbcEnvironmentHandle
> environmentHandle)
> at System.Data.Odbc.OdbcConnectionFactory.CreateConnection
> (DbConnectionOptions options, Object poolGroupProviderInfo,
> DbConnectionPool pool, DbConnection owningObject)
> at
> System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection
> (DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
> at System.Data.ProviderBase.DbConnectionFactory.GetConnection
> (DbConnection owningConnection)
> at System.Data.ProviderBase.DbConnectionClosed.OpenConnection
> (DbConnection outerConnection, DbConnectionFactory connectionFactory)
> at System.Data.Odbc.OdbcConnection.Open()
> at StretchBase.Core.Controller.Initialize(String DSNstring) in
> xxxxxxxxxxxxxx
> at StretchBase.MbUnit.ColumnListTests.Test() in xxxxxxxxxxxx
>
>
> Please help - I'm out of ideas.
> Thank you!
>
>
>
>
> >
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"MbUnit.User" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/MbUnitUser?hl=en
-~----------~----~----~----~------~----~------~--~---