Ich habe 2 Fragen Test Masstransit Verbraucher:Masstransit Verbraucher schwer zu testen
- Sync Ausgabe
- Message
Die erste ist wie folgt:
var testConsumer = TestFactory.ForConsumer<ImageUploadConsumer>().New(
test =>
{
test.UseConsumerFactory(new InstanceConsumerFactory<ImageUploadConsumer>(ImageConsumer));
test.Publish(message, (scenario, context) =>
{
});
});
testConsumer.Execute(); //Is non blocking
Die folgende Zeile (unten) schlägt fehl, weil diese Zeile:
moqFileMetaRepo.Verify(_ => _.Add(It.IsAny<IFileMeta>()),Times.Once);
wird 9,9/10 vor ausgeführt ... diese Linie immer tat:
public async Task Consume(ConsumeContext<ImageUploadWithThumb> context)
Mein fix war
moqFileMetaRepo
.Setup(repo => repo.Add(It.IsAny<IFileMeta>()))
.Callback(() => { AutoEvent.Set(); });
Und rufen Sie die folgende vor dem assert zu tun:
AutoEvent.WaitOne(TimeSpan.FromSeconds(10));
Das ist wirklich eine Menge Arbeit. Und macht TDD oder Testing im Allgemeinen zu einer Hektik, von der ich befürchte, dass sie nur mit der Zeit ignoriert wird.
MessageData Problem ist ein anderes. Hier ist die Nutzlast schicke ich durch
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 })
};
ich erwarte ich byte[] { 1, 2, 3 }
am anderen Ende zu erhalten, ohne eine tatsächliche Ausdauer zu schaffen zu müssen.
Auf der Senderseite die MessageData.Value ok löst. Der Verbraucher bombardiert völlig. Works in prod though = _ = was nicht der Test sein sollte.
Ich möchte wirklich nur spotten und UnitTest meine Verbraucher ohne das Framework - vorzugsweise in weniger als 5 Minuten oder so zu wrestlen. Gibt es einen Ausweg, während man bei MT3 bleibt?