我曾经有过这个测试,它传递得很好(一旦处理了所有三个消息,这个传奇就完成了。
Test.Saga<TestSagaHandler>(sagaId)
.When(x =>
{
x.Handle(new TestSagaStartMessageOne
{
Id = sagaId
});
x.Handle(new TestSagaStartMessageTwo
{
Id = sagaId
});
x.Handle(new TestSagaNonStartingMessage
{
Id = sagaId
});
});
.AssertSagaCompletionIs(true);
我现在想要将TestSagaNonStartingMessage分解为自己的处理程序,并执行以下操作:
Test.Saga<TestSagaHandler>(sagaId)
.When(x =>
{
x.Handle(new TestSagaStartMessageOne
{
Id = sagaId
});
x.Handle(new TestSagaStartMessageTwo
{
Id = sagaId
});
});
Test.Saga<TestSagaHandlerSingleMessage>(sagaId)
.When(x =>
x.Handle(new TestSagaNonStartingMessage
{
Id = sagaId
})
)
.AssertSagaCompletionIs(true);
但是,在处理TestSagaNonStartingMessage时 - 传统数据不会保留在以前的处理程序中。
我是否存在持久性问题,或者测试结构是否很糟糕?
答案 0 :(得分:3)
测试结构不正确 - 请查看制造样本中的测试项目,看看它应该如何构建。简短的回答是链接第二个。在第一个之后(...)。
答案 1 :(得分:1)
对于其他读者参考,正确的测试结构应类似于:
Test.Saga<TestSagaHandler>(sagaId)
.When(x =>
{
x.Handle(new TestSagaStartMessageOne { Id = sagaId });
x.Handle(new TestSagaStartMessageTwo { Id = sagaId });
})
.When(x =>
x.Handle(new TestSagaNonStartingMessage { Id = sagaId })
)
.AssertSagaCompletionIs(true);
正如Udi所说,链接&#34;当&#34;条款一起。
此外,为了从测试中获得更多价值,请考虑引入例外,例如ExpectSend<>
,ExpectPublish
等。