我在单元测试中有以下代码
using ThirdClass;
public class OtherClass
{
public void foo()
{
ThirdClass third = new ThirdClass();
third.bar();
}
}
这是另一个班级
public void TestMethod()
{
OtherClass other = new OtherClass();
Mock<ThirdClass> third = new Mock<ThirdClass>();
third.setup(o => o.bar()).Returns(/*mock implementation*/);
/*use third in all instances of ThirdClass in OtherClass*/
OtherClass.foo();
}
ThirdClass仍处于开发阶段,但我希望能够使用moq运行我的单元测试。有没有办法告诉moq在TestClass中模拟ThirdClass而不使用OtherClass /依赖于moq?理想情况如下:
(with-eval-after-load 'neotree
(evil-define-key 'evilified neotree-mode-map (kbd "i") 'neotree-previous-line)
(evil-define-key 'evilified neotree-mode-map (kbd "k") 'neotree-next-line))
答案 0 :(得分:3)
类 if (d.value<breaks[0]) {
return colours[0];
}
for (i=0;i<breaks.length+1;i++){
if (d.value>=breaks[i]&&d.value<breaks[i+1]){
return colours[i];
}
}
中的方法foo()
不是单元可测试的,因为您创建了实际服务的新实例而无法模拟它。
如果你想模仿它,那么你必须注入OtherClass
依赖注入。
ThirdClass
的示例将是:
OtherClass
您的测试方法以及测试其他类的示例可以是:
public class OtherClass
{
private readonly ThirdClass _thirdClass;
public OtherClass(ThirdClass thirdClass)
{
_thirdClass = thirdClass;
}
public void foo()
{
_thirdClass.bar();
}
}
您可以使用示例尝试使用Unity DI容器。
答案 1 :(得分:0)
感谢您的想法,伙计们。我最终创建了另一个版本的OtherClass.foo(),它接受了一个ThirdClass的实例,并且在没有它的版本中创建了一个实例。测试时我可以调用foo(mockThird),但用户可以使用foo()。
using ThirdClass;
public class OtherClass
{
public void foo(ThirdClass third)
{
third.bar();
}
public void foo()
{
foo(new ThirdClass());
}
}
在测试课程中
public void TestMethod()
{
Mock<ThirdClass> third = new Mock<ThirdClass>();
third.setup(o => o.bar()).Returns(/*mock implementation*/);
OtherClass testObject= new OtherClass();
testObject.foo(third);
}