You are right - something fishy is happening with MySQL. It's some type of timing error - and just happens to show up in NUnit and MbUnit and not when run normally.
Thanks for you help. Jeff Brown wrote: > I really have no idea then. > > Incidentally, a static class is typically not considered a Singleton. > Here are some typical Singleton implementation patterns for C# and an > analysis: http://www.yoda.arachsys.com/csharp/singleton.html > > Note that if NUnit and MbUnit can cause this failure to occur then it > could happen in other circumstances too. > > Jeff. > > On Sat, Nov 22, 2008 at 9:33 AM, Tomas Florian > <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote: > > > Actually the code I sent is all there is. This is a new project > and the > very first test failed like this. So the code I sent isn't a partial > listing - that's all there was. > > > > [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> wrote: > > MbUnit really does nothing special with any of your code > including static classes. > > > > You might want to check how you implemented that Singleton. > Perhaps the shared connection is being closed somewhere. > > -----Original Message----- > > From: Tomas Florian <[EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]>> > > Date: Friday, Nov 21, 2008 7:31 pm > > Subject: MbUnit Re: Weird database connection failure > > To: [EMAIL PROTECTED]: > [email protected] <mailto:[email protected]> > > > > > > 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] <mailto:[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] > <mailto:[EMAIL PROTECTED]>> > > Date: Friday, Nov 21, 2008 4:16 pm > > Subject: MbUnit Weird database connection failure > > To: "MbUnit.User" <[email protected] > <mailto:[email protected]>>Reply-To: > [email protected] <mailto:[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! > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > This message has been scanned for viruses and > dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is > believed to be clean. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
