【发布时间】:2021-03-07 18:44:01
【问题描述】:
我有一个接口 ICommand -> 标记接口:
public interface ICommand
{
}
另一个接口ICommandHandle:
public interface ICommandHandler<T> where T : ICommand
{
Task HandleAsync(T command);
}
接下来是 ICommandDispatcher:
public interface ICommandDispatcher : ICommand
{
Task DispatchAsync<T>(T command) where 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);
}
}
我正在编写一个单元测试来检查用户是否存在。 我想调用我的处理程序并完成整个过程,如创建用户、验证输入参数等。当然在内存中,在这种情况下我不会连接到我的真实数据库。我的问题是这段代码是否正确。
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));
我想知道我应该在测试中使用
new Mock<ICommandHandler>
或
new Mock<ICommandDispatcher>
阅读下面的 cmets 后,我想知道我是否将单元测试与集成测试混淆了?
【问题讨论】:
-
当前状态下的问题不完整,因此不清楚。您能否重新格式化问题,以便我们更清楚地了解当前问题以及您实际上想要做什么?请参阅How to Ask 页面以获得澄清此问题的帮助。
-
"我正在编写单元测试,它将检查用户是否存在。" - 这是一个实际 单元测试,还是当你真正的意思是集成测试时你误用了“单元测试”这个词?
-
ICommandHandler本身是通用的吗?T command在哪里/如何定义? -
我更正了我的帖子,请给我更多信息。
标签: c# unit-testing .net-core moq