interface ITaxi
{
int Fare { get; set; }
int getTotalFare();
}
class Taxi : Car, ITaxi
{
public Taxi(Engine e) : base (e){ }
public int Fare { get; set; }
public int getTotalFare()
{
return 0;
}
}
[TestFixture]
class TestTaxi
{
[Test]
public void TestTaxiFare()
{
MockRepository mockRepo = new MockRepository();
ITaxi taxi = mockRepo.Stub<ITaxi>();
using (mockRepo.Record())
{
SetupResult.For(taxi.getTotalFare()).Return(400);
}
Assert.AreEqual(400, taxi.getTotalFare());
}
}
我是测试驱动开发的新手。我试图模拟一个类并为该方法设置一个值。 但我
message castle.dynamicProxy.generators.generatorexception Type is not public, so a proxy cannot be generated. type: UnitTest.ITaxi
我在代码中遗漏了什么吗?
存根和模拟有什么区别? [我读链接不明白]?
答案 0 :(得分:2)
您必须声明Rhino Mocks的接口public
才能创建模拟:
public interface ITaxi
{
int Fare { get; set; }
int getTotalFare();
}
答案 1 :(得分:0)
将班级更改为公开
public class Taxi : Car, ITaxi
interface ITaxi
默认情况下不是公开的
答案 2 :(得分:0)
正如其他人所提到的,您需要将接口声明为Public。
模拟和存根之间的区别非常微妙(根据我对Roy Osherove的Art of Unit Testing书的理解)。
为了进一步解释,存根是一个预制响应(一个虚假对象),它有助于以后执行断言(即它可以是您正在测试的方法的参数)。您永远不会断言存根通过或未通过测试,因为它是您已配置为帮助测试其他内容的对象
另一方面的模拟设定了期望值,例如,如果我使用参数集配置此对象,我期望发生什么?它会改变它的内部状态(如我所料)还是会抛出异常(我期望)。这是您要测试的断言。
在更复杂的测试中,你可以拥有许多存根,但你应该只有一个模拟。