繁体   English   中英

SaveChangesAsync 的单元测试用例

[英]Unit test case for SaveChangesAsync

我在我的项目中使用 Mass Transit,Entity Framework,C#。

我让我的消费者消费一个事件并将数据插入表中。 我想知道如何为此方法模拟消费者和单元测试用例。

public async Task Consume(ConsumeContext<MyEvent> context)
{
    private readonly MyDbContext _dbContext;  

    try
    {
        // Here logic to insert record in to new database
        var data = new MyService.TableNmae()
        {
            
            Id = context.Message.MyId,
            Description = "test data"
        };

        _ = _dbContext.TableName.AddAsync(data);
        _ = _dbContext.SaveChangesAsync(context.CancellationToken);
    }
    catch (Exception ex)
    {
        _logger.LogCritical($"{GetType().Name}:{nameof(Consume)} {ex}");
    }

    await Task.CompletedTask;
}

这是我添加的单元测试用例代码

{ 私人 ITestHarness _testHarness;

[SetUp]
public void Initialize()
{
    var serviceCollection = new ServiceCollection();

    serviceCollection.AddMassTransitTestHarness(busRegistrationConfigurator =>
    {
        busRegistrationConfigurator.AddConsumer<MyConsumer>();
    });

    var serviceProvider = serviceCollection.BuildServiceProvider();

    _testHarness = serviceProvider.GetRequiredService<ITestHarness>();
}


[Test]

public async Task TestMethod1()
{
    await _testHarness.Start();
    await _testHarness.Bus.Publish(new MyEvent { Code = "H"});

    Assert.That(await _testHarness.Published.Any<MyEvent>(), Is.True);
    Assert.That(await _testHarness.Consumed.Any<MyEvent>(), Is.True);
}

}

预期:正确但是是:错误。

这里第一个断言是真的,但第二个断言总是假的,

我建议不要尝试模拟ConsumeContext<T> ,而是使用 MassTransit 测试工具,它记录在 web 站点上

正如其他人所指出的那样,简单地测试您的实体是否已保存是一个非常简单的测试,而更多的集成测试假设您正在验证该实体正在保存所有必需的属性等。我不会单独测试,而不是单独测试。确保数据可用于被测试的更高级别的操作。

问题未解决?试试以下方法:

SaveChangesAsync 的单元测试用例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM