Mediatr:单元测试行为/验证

Posted

技术标签:

【中文标题】Mediatr:单元测试行为/验证【英文标题】:Mediatr: Unit Testing behaviors/validation 【发布时间】:2019-01-03 14:40:33 【问题描述】:

我有一个将实体保存到数据库的命令/处理程序,但在我的代码中,它首先使用 fluentvalidation 进行验证(验证管道)。

我能够创建一个成功测试来测试处理程序,但现在我想确保命令首先通过验证。

我该怎么做呢?我应该像处理处理程序一样独立调用验证吗?如果是这样,我该怎么做

这是我的代码

    [Test]
    public  async Task CreateCoinCommand_Success()
    
        var context = new Mock<EventsContext>();
        var ownersMock = CreateDbSetMock(new List<Owner>());

        context.Setup(x => x.Owners).Returns(ownersMock.Object);

        var handler = new CreateCoinCommandHandler(context.Object, mapper.Object );


        var cmd = new CreateCoinCommand(1, "sym", "name", null, null, null, 1, "description",
            null, "https://google.com", null, null, null, new []1,2);

        var cltToken = new System.Threading.CancellationToken();
        var result = await handler.Handle(cmd, cltToken);

        Assert.IsInstanceOf<Unit>(result);
    

我的验证者叫CreateCoinCommandValidator

【问题讨论】:

【参考方案1】:

是的,在单元测试中你需要手动调用验证器

// Arrange
var validator = new CreateCoinCommandValidator();
var cmd = new CreateCoinCommand(1, "sym", "name", null, null, null, 1, "description",
            null, "https://google.com", null, null, null, new []1,2);

// Act
var validationResult = await validator.ValidateAsync(cmd);

// Assert
Assert.True(validationResult.IsValid);
...

另见Default testing extensions

【讨论】:

以上是关于Mediatr:单元测试行为/验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 Moq 模拟 MediatR 3

验证属性或配置的单元/集成测试

Java单元测试对void方法的测试

Java单元测试对void方法的测试

Java单元测试对void方法的测试

软件测试基础理论体系学习4-单元测试的目的?概念是什么?过程是什么?