我在测试MassTransit消费者方面有两个问题:
第一个是这样的:
var testConsumer = TestFactory.ForConsumer<ImageUploadConsumer>().New(
test =>
{
test.UseConsumerFactory(new InstanceConsumerFactory<ImageUploadConsumer>(ImageConsumer));
test.Publish(message, (scenario, context) =>
{
});
});
testConsumer.Execute(); //Is non blocking
以下行(如下)失败,因为这一行:
moqFileMetaRepo.Verify(_ => _.Add(It.IsAny<IFileMeta>()),Times.Once );
执行9.9 / 10之前......这条线曾经做过:
public async Task Consume(ConsumeContext<ImageUploadWithThumb> context)
我的修复一直是
moqFileMetaRepo
.Setup(repo => repo.Add(It.IsAny<IFileMeta>()))
.Callback(() => { AutoEvent.Set(); });
在断言之前调用以下内容:
AutoEvent.WaitOne(TimeSpan.FromSeconds(10));
这真的是很多工作。并且使得TDD或测试总体上很麻烦,我担心这会随着时间的推移而被忽略。
MessageData问题是另一个问题。这是我通过
发送的有效负载 message = new ImageUploadWithThumb()
{
Id = Guid.NewGuid(),
FileName = "Test.jpg",
User = "Me",
Extension = "jpg",
OriginalImage = new ConstantMessageData<byte[]>(new Uri("https://g00gle.com"), new byte[] { 1, 2, 3 })
};
我希望在另一端获得byte[] { 1, 2, 3 }
,而不必诉诸于创建实际的持久性。
在发件人方面,MessageData.Value解析正常。消费者完全是炸弹。在prod中工作= _ =这不是测试的地方。
我真的只想嘲笑和UnitTest我的消费者不必与框架搏斗 - 最好在5分钟左右。在坚持使用MT3的时候还有出路吗?
答案 0 :(得分:1)
我建议查看MassTransit.TestFramework
包。它确实需要NUnit,但你总是可以把类和它移植到你自己的测试框架。
所有MassTransit单元测试都是使用此框架中的fixture来编写的。最初的.Testing命名空间是一个受伤的世界,它并没有完全生存,我不确定它是否真的完全正常工作。它不是为异步而设计的,因此很难在不完全丢弃它的情况下进行转换。