我在单元测试下面的方法时遇到问题。我不能模拟 MyClass
但我需要填写其中的 Prop 才能对方法的其余部分进行单元测试。是否可以创建 MyClass
实例并在单元测试中进行评估?
public async Task<MyResponse> Handle(MyRequest request, CancellationToken cancellationToken)
{
MyClass obj = new MyClass();
_dependecy.Execute(obj);
foreach(var o in obj.Props)
{
//do some processing
}
}
最佳答案
您需要将 MyClass 的实例作为构造函数参数、属性或方法参数注入(inject)。然后,您可以模拟它并传入模拟实例,或者根据您的代码,可能不需要模拟它,您可以只传递一个 MyClass 实例,并为测试设置属性。
通过构造函数传递MyClass
:
public class ClassThatUsesMyClass
{
private readonly MyClass _myClass;
public ClassThatUsesMyClass(MyClass myClass)
{
_myClass = myClass;
}
public async Task<MyResponse> Handle(MyRequest request,
CancellationToken cancellationToken)
{
// This method uses the _myClass field instead of creating an instance of MyClass
}
}
或者作为方法参数:
public class ClassThatUsesMyClass
{
public async Task<MyResponse> Handle(MyRequest request, MyClass myClass,
CancellationToken cancellationToken)
{
// This method uses the myClass argument instead of creating an instance of MyClass
}
}
在这两种情况下,类接收 MyClass
的实例而不是创建它。这就是我们所说的依赖注入(inject)。(MyClass
是依赖,即它所依赖或需要的东西。)
因为它是作为参数传入的,所以单元测试能够首先设置它的属性。
关于c# - 在方法中模拟一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56866991/