Unit testing Moq部分类,如Rhino Mock中的
嗨,我对嘲弄还不熟悉 我有一门课:Unit testing Moq部分类,如Rhino Mock中的,unit-testing,moq,Unit Testing,Moq,嗨,我对嘲弄还不熟悉 我有一门课: public class Car { public virtual void Register() { ... Warrant(); } public virtual void Warrant() { ... } } 我想测试注册调用授权。使用我设计的Rhinomock: [Test] public void RhinoCarTest() { var mocks = n
public class Car
{
public virtual void Register() {
...
Warrant();
}
public virtual void Warrant() {
...
}
}
我想测试注册
调用授权
。使用我设计的Rhinomock:
[Test]
public void RhinoCarTest() {
var mocks = new Rhino.Mocks.MockRepository();
var car = mocks.PartialMock<Car>();
mocks.ReplayAll();
car.Stub(x => x.Warrant());
car.Register();
car.AssertWasCalled(x => x.Warrant());
}
[测试]
公营机构{
var mocks=new Rhino.mocks.MockRepository();
var car=mocks.PartialMock();
mocks.ReplayAll();
car.Stub(x=>x.carry());
汽车登记册();
调用car.assertwas(x=>x.carry());
}
我甚至不确定这是否正确,但它似乎起到了作用。我想在莫克做同样的事情。我似乎找不到部分最小起订量
我想到的是:
[Test]
public void MoqCarTest() {
var car = new Mock<Car>();
car.Setup(x => x.Warrant());
car.Object.Register();
car.Verify(x => x.Warrant());
}
[测试]
公共空间{
var car=新模拟();
car.Setup(x=>x.carry());
car.Object.Register();
验证(x=>x.carry());
}
但这根本不起作用。有人能给我指出正确的方向吗?Rhino中的部分类。除非您设置了Mock和/或stub,否则Mock将调用基类方法。默认情况下,如果您创建mock来专门调用基类方法,Moq将只调用基类方法。以下是一个适用于您的示例的示例:
var car = new Mock<Car> {CallBase = true};
car.Object.Register();
car.Verify(c => c.Warrant(), Times.Once());
var-car=newmock{CallBase=true};
car.Object.Register();
验证(c=>c.carry(),Times.Once());
但是,我会尝试避免这种方法(验证是否调用了特定的方法)。相反,您的测试应该简单地确保在调用方法之后完成了正确的“工作”。如何完成这项工作是该方法的私有实现
如果您编写的测试能够确保调用某些方法,那么随着时间的推移,您的测试可能会变得更加脆弱,尤其是当您为性能或其他问题重构时。嗨,帕特里克·斯蒂尔,谢谢您的回答。因此,如果您将Register方法存根去掉,使存根返回您在测试中想要的内容,这是正确的。然后您只需测试功能是否正确。另一件事是,如果你说你不应该检查已经调用的方法,你是说理想情况下你根本不应该使用Verify吗?如果Register方法是你想要测试的,你应该去掉carry方法,这样里面的任何bug都不会影响你对Register的单元测试。然后,编写一个单独的单元测试。我使用Verify来确保对某些对象(通常是依赖项)调用方法。示例:如果我有一个应该将数据保存到数据库的类,那么我将验证在调用“Update”期间是否调用了mock iReportory的“save”方法。同样,我可以确保在不应该调用它的时候不调用它。