Code: Select all
// Program.cs
using SampleWorker;
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services => { services.AddHostedService(); })
.Build();
host.Run();
< /code>
// Worker.cs
public class Worker : BackgroundService
{
private readonly ILogger _logger;
public Worker(ILogger logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
// - connect to a middleware (data source)
// - connect to database (data sink)
// - received events from middleware, transform + persist in database
}
}
< /code>
Ich möchte in der Lage sein, einen End-to-End-Test zu schreiben, der Datenquelle und -senker über TestContainer (Works) und das zu testende Gerät, den Arbeiterdienst, irgendwie direkt über .NET Core liefert. Mit einer Webanwendung würden Sie die WebApplicationFactory
{
///
/// Tests the full round trip from an event being
/// - picked up by the worker service
/// - processed and transformed
/// - persisted to the database.
///
[Fact]
public void EventIsProcessedAndWrittenToDatabase()
{
// arrange
// - start middleware as data source (testcontainers)
// - start database as data sink (testcontainers)
// TODO there is no WorkerFactory.
// How can I start my SampleWorker with all the config in Program.cs ?
var unitUnderTest = new WorkerFactory();
// act
// - publish an event to the middleware (data source)
// assert
// - check that there are entries in the database (data sink)
}
}
< /code>
Ich habe eine ähnliche Version dieses Tests, die bereits funktioniert, indem der Samplerworker auch als Docker -Container ausgeführt wird. Dies verwendet das Bild von TestContainer aus der FreomDockerFileBuilder. Ich möchte jedoch in der Lage sein, mein zu testendes Gerät einfach zu debuggen, was mit meinem aktuellen Docker -Ansatz wirklich kompliziert wird. < /P>
Ideen? Danke