我在以下方法中遇到了麻烦单元测试。我无法模拟MyClass
,但是我需要填充其中的道具才能对方法的其余部分进行单元测试。是否可以创建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
}
}
答案 0 :(得分:3)
您需要注入MyClass的实例作为构造函数参数,属性或方法参数。然后,您可以对其进行模拟并传递一个模拟的实例,或者根据您的代码,可能不必对其进行模拟,而只需传递一个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
的实例,而不是创建。这就是我们所说的依赖注入。(MyClass
是依赖关系,即依赖或需要的东西。)
因为它作为参数传递,所以单元测试能够首先设置其属性。