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
-~----------~----~----~----~------~----~------~--~---

Reply via email to