我目前正在编写使用我的一个模拟接口中的方法的单元测试。一切正常,但是当我向接口添加一个新方法(接口和它的基类之间的连接很好)时,单元测试项目中的模拟接口没有选择新方法,抛出一个“未定义的方法” “错误。这是我如何添加新方法的基本示例。
基类:
namespace MyProject.Business
{
public class MyProjectValidator: IValidator
{
private readonly IValidator mValidator;
public MyProject(IValidator validator)
{
this.mValidator= validator;
}
public bool myMethod()
{
return true;
}
public bool myNewMethod()
{
return true;
}
}
}
接口
namespace MyProject.Business
{
public interface IValidator
{
bool myMethod();
bool myNewMethod ();
}
}
单元测试(不同的项目,相同的解决方案)
using MyProject.Business;
namespace MyProject.Tests.Business
{
[TestClass]
public class MyProjectTests
{
[TestMethod]
public void testMethods()
{
var testValidator= new Mock<IValidator>();
var testMyProject= new MyProject(testValidator.Object);
var testOld = testValidator.myMethod(); // testOld = true
var testNew = testValidator.myNewMethod(); // error: myNewMethod() not defined
}
}
}
正如我上面评论的那样,我新添加的方法无法识别。我的旧方法是在创建单元测试项目之前创建的(我假设,我继承了前开发人员的代码)。我尝试检查单元测试项目中的引用是否存在失败的链接,但是IValidator的所有功能都出现了。我尝试过重建和重启&amp;重建解决方案和项目无济于事。
有关为什么“myNewMethod()”未在我的单元测试项目中被识别的任何指导将不胜感激。
更新:根据要求添加了使用行。
答案 0 :(得分:0)
关于@ 31eee384的评论,问题确实与缺少对象引用有关。将调用更改为testValidator.Object.myNewMethod();
(原始方法的接口的对象引用已隐藏在其他位置)允许识别该方法。谢谢大家的投入!
答案 1 :(得分:0)
问题还在于你正在调用Mock的方法。您应该使用该testValidator进行的唯一事情是设置您的期望并调用结果并进行一些验证(如果有的话)。你永远不应该从模拟中调用接口方法,因为它确实没有意义;您希望测试您的业务类,并使用模拟来帮助您处理接口为您的业务类提供的任何相关行为。希望它有意义。