请考虑以下简单测试:
[Fact]
public void Should_Test_Something()
{
using (var mock = AutoMock.GetLoose())
{
using (var workflow = mock.Create<IWorkflow>())
{
var result = workflow.DoSomething();
// ...
}
}
}
在DoSomething()
内设置断点时,Visual Studio将永远不会断点。这是为什么?我可以顺利完成测试,没有任何问题。
public interface IWorkflow
{
bool DoSomething();
}
public class Workflow : IWorkflow
{
public Workflow( // Some long list of dependencies...)
public bool DoSomething()
{
// I do something, a breakpoint set here does never get hit
}
}
答案 0 :(得分:3)
在DoSomething()中设置断点时,Visual Studio将永远不会在其上断点。这是为什么?我可以顺利完成测试。
因为该接口正在被模拟和使用。不是实际的类实现。
这是模拟界面的全部要点。这样就不会使用实际的类。而是界面的模拟。
我如何以隔离的方式测试我的方法DoSomething(),而不必提供所有依赖项?
您将需要模拟所有依赖关系,并使用这些依赖关系初始化实际的类。
[Fact]
public void Should_Test_Something() {
using (var mock = AutoMock.GetLoose()) {
//Arrange
IWorkflow workflow = mock.Create<Workflow>(); //<-- note asking for actual class
//Act
var result = workflow.DoSomething();
//Assert
// ...assert expected behavior
}
}
提供的所有依赖关系都可以在没有不良行为的情况下创建,并带有创建依赖关系的模拟对象的自动模拟并将其传递给类。