Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在具有CQRS模式的Moq中使用通用接口_C#_Unit Testing_Moq_Core - Fatal编程技术网

C# 在具有CQRS模式的Moq中使用通用接口

C# 在具有CQRS模式的Moq中使用通用接口,c#,unit-testing,moq,core,C#,Unit Testing,Moq,Core,我有界面ICommand->marker-Face public interface ICommand { } 另一个接口ICommandHandle public interface ICommandHandler<T> where T : ICommand { Task HandleAsync(T command); } 公共接口ICommandHandler,其中T:ICommand { 任务HandleAsync(T命令); } 接下来是ICommandDisp

我有界面ICommand->marker-Face

public interface ICommand
{
}
另一个接口ICommandHandle

public interface ICommandHandler<T> where T : ICommand
{
    Task HandleAsync(T command);
}
公共接口ICommandHandler,其中T:ICommand
{
任务HandleAsync(T命令);
}
接下来是ICommandDispatcher

public interface ICommandDispatcher : ICommand
{
    Task DispatchAsync<T>(T command) where T : ICommand; 
}
公共接口ICommand调度程序:ICommand
{
任务调度异步(T命令),其中T:ICommand;
}
和CommandDispatcher类

public class CommandDispatcher : ICommandDispatcher
{
    private readonly IComponentContext _context;

    public CommandDispatcher(IComponentContext componentContext)
    {
        _context = componentContext;
    }

    public async Task DispatchAsync<T>(T command) where T : ICommand
    {
        if (command == null)
            throw new ArgumentNullException(nameof(command), "Command can not be null");

        var handler = _context.Resolve<ICommandHandler<T>>();
        await handler.HandleAsync(command);
    }
}
公共类CommandDispatcher:ICommandDispatcher
{
私有只读IComponentContext_context;
公共命令调度程序(IComponentContext componentContext)
{
_上下文=组件上下文;
}
公共异步任务DispatchAsync(T命令),其中T:ICommand
{
如果(命令==null)
抛出新ArgumentNullException(nameof(command),“command不能为null”);
var handler=_context.Resolve();
等待处理程序HandleAsync(命令);
}
}

我正在编写单元测试,它将检查用户是否存在。 我想调用我的处理程序并完成整个过程,如创建用户、有效输入参数等。当然,在内存中,在这种情况下,我不会连接到我的真实数据库。我的问题是这个代码是正确的

var commandDispatcher = new Mock<ICommandHandler<CreateUser>>();
var command = new CreateUser
{
    Name = "user",
    Email = "user@email.com"
};

var client = new Client("user", "user@email.com");
commandDispatcher.Setup(x => x.HandleAsync(command));   
var commandDispatcher=new Mock();
var命令=newcreateuser
{
Name=“user”,
电子邮件=”user@email.com"
};
var客户端=新客户端(“用户”user@email.com");
commandDispatcher.Setup(x=>x.HandleAsync(command));
我想知道我应该在测试中使用吗

new Mock<ICommandHandler>
newmock

newmock

但是现在就像你写的,我只是想知道我把单元测试和集成测试混淆了?

我觉得这个教程很好:

单元测试也可以是“测试一个特定的类”。 因此,您可以测试CreateUserHandler是否正确调用HandleAsync()。
但您无法实际测试是否创建了用户,因为这是一个需要调用多个“单元”的操作。为此,通常使用集成测试。

我觉得本教程很好:

单元测试也可以是“测试一个特定的类”。 因此,您可以测试CreateUserHandler是否正确调用HandleAsync()。
但您无法实际测试是否创建了用户,因为这是一个需要调用多个“单元”的操作。为此,通常使用集成测试。

当前状态下的问题不完整,因此不清楚。你能重新格式化这个问题吗?这样我们就可以更清楚地了解当前的问题以及你实际上在做什么?请参阅帮助页面以澄清此问题。“我正在编写单元测试,它将检查用户是否存在。”-这是一个实际的单元测试,还是您在真正指集成测试时误用了术语“单元测试”?
ICommandHandler
本身是通用的吗?
T command
在哪里/如何定义?我更正了我的帖子,请提供更多信息。当前状态下的问题不完整,因此不清楚。你能重新格式化这个问题吗?这样我们就可以更清楚地了解当前的问题以及你实际上在做什么?请参阅帮助页面以澄清此问题。“我正在编写单元测试,它将检查用户是否存在。”-这是一个实际的单元测试,还是您在真正指集成测试时误用了术语“单元测试”?
ICommandHandler
本身是通用的吗?
T命令在哪里/如何定义?我更正了我的帖子,请给我更多信息。这是一个单元测试:例如,我调用我的处理程序来创建新用户。我把name属性放在空白处,这个测试调用我的处理程序并返回错误,比如参数不能为null或空白?这是单元测试还是集成测试?在这种情况下,您可以对负责验证“创建客户”请求的“单元”进行单元测试。但问题是谁负责这个验证?调用的处理程序或其他东西?。如果您将代码结构化为处理程序是负责验证的处理程序,则可以为handlerClass创建单元测试方法,用于检查在使用错误数据调用handler.invoke时是否应用了验证规则如果处理程序是验证请求的处理程序,则是方法(测试)这就是检查您的处理程序是否抛出异常是UnitTest,这也是一个单元测试:例如,我调用创建新用户的处理程序。我把name属性放在空白处,这个测试调用我的处理程序并返回错误,比如参数不能为null或空白?这是单元测试还是集成测试?在这种情况下,您可以对负责验证“创建客户”请求的“单元”进行单元测试。但问题是谁负责这个验证?调用的处理程序或其他东西?。如果您将代码结构化为处理程序是负责验证的处理程序,则可以为handlerClass创建单元测试方法,用于检查在使用错误数据调用handler.invoke时是否应用了验证规则如果处理程序是验证请求的处理程序,则是方法(测试)这就是检查您的处理程序是否正在抛出exception is unit test
new Mock<ICommandDispatcher>