2011-02-10 13 views
5

私はこの記事(http://blog.zoolutions.se/post/2010/04/01/Conquering-NServiceBus-part-4-e28093-Testing.aspx)に従って、自分のnservicebus sagaの単体テストを作成しようとしていますプロジェクトNServiceBus Sagaの単体テストを作成するには?

なぜそれがいつも不平を言っている理由がわからない 誰も私がそれを修正できるか知っていますか?

サガをテストするために

public class ReportSaga : Saga<ReportSagaData>, 
          IAmStartedByMessages<RequestReportMessage>, 
          IHandleMessages<PollingReportStatusMessage> 
{ 
// implementation 
} 



[TestFixture] 
    public class ReportSaga_HandleRequestReportMessageTests 
    { 
     [TestFixtureSetUp] 
     public void SetUp() 
     { 
      var assemblies = new[] 
         { 
          typeof (ReportSaga).Assembly, 
          typeof (RequestReportMessage).Assembly, 
          typeof (PollingReportStatusMessage).Assembly, 
          Assembly.Load("NServiceBus"), 
          Assembly.Load("NServiceBus.Core") 
         }; 

      Test.Initialize(assemblies); 
     } 

     [Test] 
     public void HandleRequestReportMessageTests() 
     { 

      Test.Handler<ReportSaga>() 
       .OnMessage<RequestReportMessage>(x => 
       { 
        x.Id = 1234; 
        x.ReportDate = DateTime.Now; 
       }); 


     } 
    } 


Test 'UnitTests.ReportSaga_HandleRequestReportMessageTests.HandleRequestReportMessageTests' failed: System.ArgumentException : GenericArguments[0], 'ReportSagaData', on 'NServiceBus.IMessageHandler`1[T]' violates the constraint of type 'T'. 
    ----> System.TypeLoadException : GenericArguments[0], 'ReportSagaData', on 'NServiceBus.IMessageHandler`1[T]' violates the constraint of type parameter 'T'. 
    at System.RuntimeType.ValidateGenericArguments(MemberInfo definition, RuntimeType[] genericArguments, Exception e) 
    at System.RuntimeType.MakeGenericType(Type[] instantiation) 
    at NServiceBus.Testing.Test.Handler[T](T handler) 
    at NServiceBus.Testing.Test.Handler[T]() 
    ReportSaga_HandleRequestReportMessageTests.cs(34,0): at UnitTests.ReportSaga_HandleRequestReportMessageTests.HandleRequestReportMessageTests() 
    --TypeLoadException 
    at System.RuntimeTypeHandle.Instantiate(RuntimeTypeHandle handle, IntPtr* pInst, Int32 numGenericArgs, ObjectHandleOnStack type) 
    at System.RuntimeTypeHandle.Instantiate(Type[] inst) 
    at System.RuntimeType.MakeGenericType(Type[] instantiation) 

0 passed, 1 failed, 0 skipped, took 1.11 seconds (NUnit 2.5.5). 

答えて

7

(私はnserviceバス2.0を使用しています)、あなたはTest.SagaではなくTest.Handlerを呼び出す必要があります。

8

UDIの言ったとおりに正確に、しかし、構文は次のようになります。

[TestFixture] 
public class ReportSaga_HandleRequestReportMessageTests 
{ 
    [TestFixtureSetUp] 
    public void SetUp() 
    { 
     var assemblies = new[] 
        { 
         typeof (ReportSaga).Assembly, 
         typeof (RequestReportMessage).Assembly, 
         typeof (PollingReportStatusMessage).Assembly, 
         Assembly.Load("NServiceBus"), 
         Assembly.Load("NServiceBus.Core") 
        }; 

     Test.Initialize(assemblies); 
    } 

    [Test] 
    public void HandleRequestReportMessageTests() 
    { 

     var message = new RequestReportMessage { Id = 1234, ReportDate = DateTime.Now }; 

     Test.Saga<ReportSaga>() 
      .ExpectPublish<PublishMessage>(e => e.SomePropertyOfPublishMethod == "value") 
      .When(x => x.Handle(message)); 

    } 
} 
関連する問題