Autofixture.n代查来电未冻结



我有一个sut与依赖关系:

public interface IDep
{
void Click(int c);
}
public class Sut
{
public Sut(IDep dep)
{
dep.Click(10);
}
}

在我的测试中,我想检查Click是否被调用,但它没有被冻结就不能工作。

var fixture = new Fixture().Customize(
new AutoNSubstituteCustomization { ConfigureMembers = true }
);
//fixture.Freeze<IDep>(); // uncommenting this line make it working
fixture.Create<Sut>();
fixture.Freeze<IDep>()
.Received(1)
.Click(Arg.Any<int>);

在我的测试中,我想检查Click是否被调用,但它不工作而不被冻结。

这是故意的。冻结行是捕获单个模拟依赖项所必需的。

在这种情况下,注入SUT的依赖项和您尝试冻结后获得的依赖项将是不同的实例。这就是为什么您的特定测试用例失败的原因。

我建议保留第一行,并将返回值传递给变量。在本例中,您可以在执行SUT之后对变量执行断言。

例如

var fixture = new Fixture().Customize(
new AutoNSubstituteCustomization { ConfigureMembers = true }
);
//Arrange
IDep dependency = fixture.Freeze<IDep>(); 
//...any configuration needed on the mock can be done here
//Act
Sut sut = fixture.Create<Sut>(); //frozen dependency will be injected into sut.
//Assert
dependency.Received(1).Click(Arg.Any<int>);

我建议回顾快速入门,以便更好地理解Freeze功能的目的

幸运的是,我们可以告诉fixture"冻结"特定类型。这意味着每次请求冻结类型的实例时,都将获得相同的实例。你可以把它想象成在IoC容器中注册一个单例实例。

相关内容

  • 没有找到相关文章

最新更新