您可以创建一个工厂来创建此任务并通过接缝使用它。您可以使用属性接缝 - 这是当您将工厂的实例设置为被测类的属性时,或者您可以通过构造函数为工厂提供构造函数接缝。然后你可以模拟这个工厂并通过两个接缝之一设置它,并检查你的 VerifyDataTypesAsync 方法是否调用了创建任务的方法。
class YourClass
{
public YourClass(ITaskFactory factory)
{}
public void VerifyDataTypesAsync()
{
Task verificationTask = factory.Create(); // you can pass an instance of a delegate as parameter if you need.
}
}
class TasksFactory : IFactory
{
public Task Create()
{
}
}
然后在您的测试中,您可以创建一个 IFactory 的模拟对象并将其传递给您的类的构造函数,然后为模拟设置模拟规则以检查方法 Create 是否被调用。
如果我们谈论的是 NUnit 和 RhinoMocks,可以查看以下内容:
var mockRepository = new MockRepository();
var mockObject = mockRepository.CreateMock<IFactory>();
var yourClass = new YourClass(mockObject);
Expect.Call(mockObject.Create);
mockRepository.ReplayAll();
mockObject.VerifyDataTypesAsync()
mockRepository.VerifyAll(); // throw Exception if your VerifyDataTypesAsync method doesn't call Create method of IFactory mock
大致这样说……但这只是一种方式……