BTW, shouldn't your DependencyResolver.InitializeWith(null) line go in a 
finally block?  Otherwise it won't run after a test failure.

So Rhino.Mocks is in play.  Hmm.  I take it your test contains a mock of 
IDbGatewayFactoryProxy.


As I said before, what's happening is that the test is failing within the 
Dynamic Proxy code itself.  That is to say, Rhino.Mocks is generating bad code.

MbUnit is then unable to capture the stack trace from the Exception.  This is a 
very unusual condition.  But now having observed it, I think I'll add some code 
to Gallio so that it can protect itself against unprintable exceptions.


So to understand the problem better, I'd like you to instrument your test as 
follows:

[Test]
public void Test()
{
    try
    {
        // your actual test code.
    }
    catch (Exception ex)
    {
        Assert.Fail("Caught an exception of type {0} and message {1}.", 
ex.GetType().FullName, ex.Message);
    }
}

The other thing I'd like to add, is that if it turns out Rhino.Mocks is 
generating bad code in some situations then we should ask Oren to take a look 
at it.  It may be a known bug.

Jeff. 

-----Original Message-----
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL 
PROTECTED]
Sent: Thursday, January 17, 2008 1:39 PM
To: MbUnit.User
Subject: MbUnit Re: Fatal Crash, not sure why


I use RowTest for some of the repository tests. I also use Rollback whenever I 
save/delete from the db for a test.
I also created a RunInRealContainer attribute, which is like a startup script 
which runs before each test. after completing the test it destroys all the 
objects.

namespace ReportingFramework.Tests
{
    public class RunInRealContainer : DecoratorPatternAttribute
    {
        public override IRunInvoker GetInvoker(IRunInvoker wrapper)
        {
            return new RunInRealContainerRunInvoker(wrapper);
        }

        private class RunInRealContainerRunInvoker :
DecoratorRunInvoker
        {
            public RunInRealContainerRunInvoker(IRunInvoker invoker)
                : base(invoker)
            {
            }

            public override object Execute(object o, IList args)
            {
                ApplicationStartupCommand.Run();
                object result = Invoker.Execute(o, args);
                DependencyResolver.InitializeWith(null);
                return result;
            }
        }
    }
}

ApplicationStartupCommand.Run(); is like poor mans dependency injection which 
loads the dependency resolver with all the types i need for constructors. after 
the test runs DependencyResolver destroys the objects with the null argument. I 
only use this attribute when running integration tests, not unit tests. 
reviewing where my code is breaking none of these attributes seem to apply.

Tests seem to execute in a completely random order (hashtable?) so I can say 
where it actually breaks.  i do know the generic type exceptions are thrown in 
the repository unit tests using rhino.mock 3.3. It do not appear to error in 
integration tests.

I applied the ApartmentState value to the test fixtures I believed to be the 
problem. this did not change the results. mbunit still fatally crashed.

Jason

On Jan 17, 3:30 pm, "Jeff Brown" <[EMAIL PROTECTED]> wrote:
> I can't think of anything MbUnit might try to do with the dynamic 
> proxy type.  It probably doesn't know it exists.  Are you using 
> TypeFixture or factories or other advanced MbUnit features in your tests?
>
> However since you mention it works in the GUI.  Try setting the 
> ApartmentState property on your test fixture, like this:
>
> [TestFixture(ApartmentState=ApartmentState.STA)]
>
> Jeff.
>
>
>
> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED] 
> On
>
> Behalf Of [EMAIL PROTECTED]
> Sent: Thursday, January 17, 2008 12:11 PM
> To: MbUnit.User
> Subject: MbUnit Re: Fatal Crash, not sure why
>
> the strange thing is sometimes (i hate that word in programming:) ) 
> all the test run successfully, other times they run and some test 
> using generics fails, but mbunit does not crash.  Then still other 
> times it crashes like above. I believe it is crashing at 2 or 3 
> specific tests. whichever one is reached 1/st2nd? then it fails.  it 
> also doesn't fail if I run the gui (web
> forms) or mbunit gui. I haven't tried mbunit.console yet.
>
> there is alot (probally too much) code to post to incorporate to 
> reproduce the problem.
>
> not knowing much about dynamic proxies/generics. could it be the 
> generic variable is cross referenced with another object. for example:
> interface Foo<MyType>
> {
> }
>
> interface Bar<MyType> : where MyType ISomeOtherInterface, new() { }
>
> mbunit is trying to pass the Foo MyType to the Bar MyType which can work?
> This seems to be what the error message states.  If that's the case, 
> would prefixing MyType (company name) fix the problem?
> interface Foo<AcmeMyType>
> {
> }
>
> interface Bar<MyType> : where MyType ISomeOtherInterface, new() { }
>
> Thank you, Jason
>
> On Jan 17, 1:33 pm, "Jeff Brown" <[EMAIL PROTECTED]> wrote:
> > So this looks like a dynamic proxy type that is being created by 
> > LLBL itself while your test runs.  I don't think MbUnit is doing 
> > anything directly to cause it.  I would guess that LLBL is generating bad 
> > code.
>
> > It looks like the error is being detected while a stack trace for 
> > some other Exception is being produced.  You'll notice the failure 
> > occurs in GetSignature while getting the stack trace of an Exception 
> > in order to report the original error.  So the original Exception 
> > itself is being
> lost.
> > It probably occurred inside the malformed dynamic proxy class.
>
> > Could you attach the source to your UserRepositoryTest and any 
> > relevant objects?
>
> > You might also want to check on the LLBL mailing list.
>
> > Jeff.
>
> > -----Original Message-----
> > From: [email protected] 
> > [mailto:[EMAIL PROTECTED]
> > On
>
> > Behalf Of [EMAIL PROTECTED]
> > Sent: Thursday, January 17, 2008 8:35 AM
> > To: MbUnit.User
> > Subject: MbUnit Re: Fatal Crash, not sure why
>
> > I just re-ran the tests twice to confirm the issue. the 1st re-run 
> > completed successfullly. the 2nd crashed again. Similiar issue with 
> > mis-matched generics, but at a different location.
>
> > [failure]
> > UserRepositoryTest.Setup.Should_return_user_from_ldap_if_not_present
> > _i
> > n_database: GenericArguments[0], 'TypeOfItem', on
> > 'IDbGatewayFactoryProxy3a9aab2
> > b37e34599bd9e40543e372619+InvocationCreateEntity_14[TypeOfEntity]'
> > violates the
> > constraint of type parameter 'TypeOfEntity'.
> > [failure]
> > UserRepositoryTest.Setup.Should_be_able_to_fetch_a_user_entity_from_
> > th
> > e_database: GenericArguments[0], 'TypeOfItem', on
> > 'IDbGatewayFactoryProxy3a9aab2
> > b37e34599bd9e40543e372619+InvocationCreateEntity_14[TypeOfEntity]'
> > violates the
> > constraint of type parameter 'TypeOfEntity'.
> > [success] UserRepositoryTest.Setup.Should_be_able_to_fetch_all_users
> > [error] Unexpected exception occured in MbUnit Internal error while 
> > running tests in ReportingFramework.Tests 
> > MbUnit.Core.Exceptions.FixtureExecutionException
> > Message: UserRepositoryTest
> > Source: MbUnit.Framework
> > StackTrace:
> >    at MbUnit.Core.Remoting.FixtureRunnerBase.RunFixture(Fixture
> > fixture)
> >    at MbUnit.Core.Remoting.DependencyFixtureRunner.RunFixtures()
> >    at MbUnit.Core.Remoting.FixtureRunnerBase.Run(FixtureExplorer
> > explorer, Repor
> > tListener reportListener)
> > Inner Exception
> > System.TypeLoadException
> > Message: GenericArguments[0], 'TypeOfItem', on 
> > 'SD.LLBLGen.Pro.ORMSupportClasses .CollectionCore`1[T]' violates the 
> > constraint of type parameter 'T'.
> > Source: mscorlib
> > StackTrace:
> >    at System.Signature._GetSignature(SignatureStruct& signature, 
> > Void* pCorSig,
> > Int32 cCorSig, IntPtr fieldHandle, IntPtr methodHandle, IntPtr 
> > declaringTypeHand
> > le)
> >    at System.Signature.GetSignature(SignatureStruct& signature, 
> > Void* pCorSig, I
> > nt32 cCorSig, RuntimeFieldHandle fieldHandle, RuntimeMethodHandle 
> > methodHandle, RuntimeTypeHandle declaringTypeHandle)
> >    at System.Signature..ctor(RuntimeMethodHandle methodHandle, 
> > RuntimeTypeHandle
> >  declaringTypeHandle)
> >    at System.Reflection.RuntimeMethodInfo.get_Signature()
> >    at System.Reflection.RuntimeMethodInfo.GetParameters()
> >    at System.Diagnostics.StackTrace.ToString(TraceFormat 
> > traceFormat)
> >    at System.Environment.GetStackTrace(Exception e, Boolean
> > needFileInfo)
> >    at System.Exception.get_StackTrace()
> >    at
> > MbUnit.Core.Reports.Serialization.ReportException.FromException(Exce
> > pt
> > ion
> > ex)
> >    at MbUnit.Core.Reports.Serialization.ReportRun.Failure(RunPipe
> > pipe, ReportMo
> > nitor monitor, Exception ex)
> >    at MbUnit.Core.RunPipeStarter.Run(Object fixture, Boolean
> > IsExplicit)
> >    at
> > MbUnit.Core.Remoting.FixtureRunnerBase.InternalRunFixture(Fixture
> > fixture)
>
> >    at
> > MbUnit.Core.Remoting.FixtureRunnerBase.FixtureRunnerStarter.Start()
>
> > [cleaning] unloading domain
> > [cleaning] domain unloaded
>
> > On Jan 17, 11:18 am, "[EMAIL PROTECTED]" 
> > <[EMAIL PROTECTED]>
> > wrote:
> > > I have been experiencing this problem on and off for about a week.
> > > I'm using v2.41.232.0. The problem does not occur if I test via  
> > > the
> GUI.
>
> > > The problem occurs with this code
> > > using System;
> > > using MbUnit.Core;
>
> > > namespace ReportingFramework.Tests {
> > >     internal class Program
> > >     {
> > >         private static void Main()
> > >         {
> > >             using (AutoRunner runner = new AutoRunner())
> > >             {
> > >                 runner.Run();
> > >                 if (!runner.IsSuccess) runner.ReportToText();
> > >             }
> > >             Console.ReadKey();
> > >         }
> > >     }
>
> > > }
>
> > > here is the console output:
> > > ------------------------------------------------------------------
> > > --
> > > --
> > > -----­----------------------------------
> > > [error] Unexpected exception occured in MbUnit Internal error 
> > > while running tests in ReportingFramework.Tests 
> > > MbUnit.Core.Exceptions.FixtureExecutionException
> > > Message: ConfigureReportTaskTest
> > > Source: MbUnit.Framework
> > > StackTrace:
> > >    at MbUnit.Core.Remoting.FixtureRunnerBase.RunFixture(Fixture
> > > fixture)
> > >    at MbUnit.Core.Remoting.DependencyFixtureRunner.RunFixtures()
> > >    at MbUnit.Core.Remoting.FixtureRunnerBase.Run(FixtureExplorer
> > > explorer, Repor
> > > tListener reportListener)
> > > Inner Exception
> > > System.TypeLoadException
> > > Message: GenericArguments[0], 'TypeOfItem', on 
> > > 'SD.LLBLGen.Pro.ORMSupportClasses .CollectionCore`1[T]' violates 
> > > the constraint of type parameter 'T'.
> > > Source: mscorlib
> > > StackTrace:
> > >    at System.Signature._GetSignature(SignatureStruct& signature,
> > > Void* pCorSig,
> > > Int32 cCorSig, IntPtr fieldHandle, IntPtr methodHandle, IntPtr 
> > > declaringTypeHand
> > > le)
> > >    at System.Signature.GetSignature(SignatureStruct& signature,
> > > Void* pCorSig, I
> > > nt32 cCorSig, RuntimeFieldHandle fieldHandle, RuntimeMethodHandle 
> > > methodHandle, RuntimeTypeHandle declaringTypeHandle)
> > >    at System.Signature..ctor(RuntimeMethodHandle methodHandle, 
> > > RuntimeTypeHandle
> > >  declaringTypeHandle)
> > >    at System.Reflection.RuntimeMethodInfo.get_Signature()
> > >    at System.Reflection.RuntimeMethodInfo.GetParameters()
> > >    at System.Diagnostics.StackTrace.ToString(TraceFormat
> > > traceFormat)
> > >    at System.Environment.GetStackTrace(Exception e, Boolean
> > > needFileInfo)
> > >    at System.Exception.get_StackTrace()
> > >    at
> > > MbUnit.Core.Reports.Serialization.ReportException.FromException(Ex
> > > ce
> > > pt
> > > ion
> > > ex)
> > >    at MbUnit.Core.Reports.Serialization.ReportRun.Failure(RunPipe
> > > pipe, ReportMo
> > > nitor monitor, Exception ex)
> > >    at MbUnit.Core.RunPipeStarter.Run(Object fixture, Boolean
> > > IsExplicit)
> > >    at
> > > MbUnit.Core.Remoting.FixtureRunnerBase.InternalRunFixture(Fixture
> > > fixture)
>
> > >    at
> > > MbUnit.Core.Remoting.FixtureRunnerBase.FixtureRunnerStarter.Start(
> > > )
>
> > > [cleaning] unloading domain
> > > [cleaning] domain unloaded
>
> > > After reviewing the stack trace above it appears mbunit is mixing 
> > > up generic calls. 'TypeOfItem' is never referenced in the 
> > > ORMSupportClass (LLBL 3rd party). I do have a generic object using 
> > > 'TypeOfItem' but that doesn't have anything to do with ORMSupportClass.
>
> > > It also doesn't make sense that the error only occurs with 
> > > autorunner and not the GUI. I'm new to unit testing and rhino 
> > > mocks so I could be missing something, but this is very confusing. 
> > > Any help is very appreciated.
>
> > > Thank you, Jason- Hide quoted text -
>
> > - Show quoted text -- Hide quoted text -
>
> - Show quoted text -


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