繁体   English   中英

在moq setup中验证参数class的参数

[英]Verify parameter of parameter class in moq setup

context.Setup(x => x.ExecuteQuery(It.IsAny<GetBrowserByNameQuery>())).Returns(value: null);

查询class:

public class GetApplicationByNameQuery : IQuery<Application, Application?>
{
    private readonly string _name;

    public GetApplicationByNameQuery(string name)
    {
        _name = name;
    }

    public Application? Execute(IQueryable<Application> queryable)
    {
        return queryable.SingleOrDefault(x => x.Name == _name);
    }
}

GetBrowserByNameQuery 需要一个字符串,我没有成功测试传递给GetBrowserByNameQuery 的字符串。

以下示例不起作用,因为它是 GetBrowserByNameQuery 的另一个实例

context.Setup(x => x.ExecuteQuery(new GetBrowserByNameQuery>(command.Name))).Returns(value: null);

您可以尝试以下方法:

GetBrowserbyNameQuery resultQuery = null;
context
   .Setup(x => x.ExecuteQuery(It.IsAny<GetBrowserByNameQuery>()))
   .Returns(value: null)
   .Callback<GetBrowserByNameQuery>(query => { resultQuery = query; });

现在在resultQuery中你有一个 class 的实际实例,它被用作参数。 您可以使用您使用的断言库断言(如果 class 具有Name的一些公共属性)。 例如对于 FluentAssertions:

resultQuery.Name.Should().Be(command.Name)

如果GetBrowserByNameQuery不公开Name ,则没有简单的方法来检查它。 无法模拟构造函数,因此您只有以下选择:

  • 通过反射访问私有字段,这非常丑陋并且违反了单元测试原则
  • 用工厂包装GetBrowserByNameQuery的创建,然后模拟工厂并检查是否使用正确的参数调用工厂方法

暂无
暂无

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

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