由于我是tdd开发的新手,我第一次尝试嘲笑而且我有 对此有疑问。
请考虑以下示例:
这里是商业
public class MyEmail
{
public bool SendEmail()
{
Email code goes here
return true;
}
}
Another class
public class Customer
{
public bool Addcustomer()
{
MyEmail obj = new MyEmail();
obj.SendEmail();
return true;
}
}
这是我对Addcustomer的测试
[TestMethod()]
public void AddCustomerTest()
{
Mock<Myemail> objemail = new Mock<Myemail>();
objemail.Setup(x=>x.SendEmail()).Returns(true);
customer obj = new Customer();
//创建客户类的对象,因为
我想测试这个类中包含的方法。
现在我的问题在这里?
obj.AddCustomer(objemail.Object);
请查看以上声明。我们在Customer类中调用了一个方法 使用参数,但实际上该方法不接受任何参数。但是该方法没有收到任何编译错误 或运行时错误。怎么可能?
它是否只发生在测试方法中,因为理想情况下不应该这样 根据c#basics编译器可以接受。
并且假设我的类Customer中的Addcustomer方法已经存在 有如下定义。那我该怎么办?
public bool Addcustomer(int Anynumber)
{
MyEmail obj = new MyEmail();
obj.SendEmail(Anynumber));
return true;
}
Assert.AreEqual(obj.AddCustomer(), true);
}
答案 0 :(得分:0)
我不确定我是否理解正确以及问题是什么,但这是设置课程的更好方法:
public class Customer
{
private MyEmail _myEmail;
public void Customer(MyEmail myEmail)
{
_myEmail = myEmail;
}
public bool Addcustomer()
{
_myEmail.SendEmail();
return true;
}
}
[TestMethod()]
public void AddCustomerTest()
{
Mock<Myemail> objemail = new Mock<Myemail>();
objemail.Setup(x=>x.SendEmail()).Returns(true);
customer obj = new Customer(objemail.Object);
//Assert something
}