Mocking 生成的服务模拟:除了Rhinomock之外的所有东西都失败了?
请参阅此代码:Mocking 生成的服务模拟:除了Rhinomock之外的所有东西都失败了?,mocking,moq,rhino-mocks,fakeiteasy,nsubstitute,Mocking,Moq,Rhino Mocks,Fakeiteasy,Nsubstitute,请参阅此代码: TicketStoreService fakeTicketStoreService = MockRepository.GenerateMock<TicketStoreService>(); fakeTicketStoreService.Expect(service => service.DoSomething(Arg.Is(new Guid()))
TicketStoreService fakeTicketStoreService =
MockRepository.GenerateMock<TicketStoreService>();
fakeTicketStoreService.Expect(service => service.DoSomething(Arg.Is(new Guid()))
.Return(new Guid());
fakeTicketStoreService.DoSomething(Arg.Is(new Guid()));
fakeTicketStoreService.VerifyAllExpectations();
TicketStoreService fakeTicketStoreService=
MockRepository.GenerateMock();
fakeTicketStoreService.Expect(service=>service.DoSomething(Arg.Is(new Guid()))
.Return(新Guid());
DoSomething(Arg.Is(new Guid());
fakeTicketStoreService.verifyallexpections();
请注意,DoSomething
是自动生成类中的非虚拟方法调用,该类不从任何接口继承。因此,根据常识,它不应该起作用。但它确实起作用。
问题是,它是唯一一个(非商业)框架可以做到这一点:
- 模仿是有效的,验证也是有效的
- Fakeitesy说它找不到默认构造函数(可能只是错误的异常消息):
在SomeNamespace类型上找不到默认构造函数。TicketStoreService
- Moq提供了一些合理且可理解的信息:
非虚拟(在VB中可重写)成员上的设置无效:service=>service.DoSomething
- NSSubstitute给出一条消息
System.NotSupportedException:无法序列化System.ComponentModel.Component.Site类型为System.ComponentModel.ISite的成员System.ComponentModel.Site,因为它是一个接口。
*我知道这些,但由于本主题之外的原因,这将是不太理想的解决方案。您可以尝试使用Fody插件,使所有成员都成为虚拟用户GIL编织,因此任何基于动态代理的库都可以使用它。请检查连接此程序所涉及的内容 至于Rhino Mocks的工作原理,我无法解释:
[Test]
public void FieldTest() {
var fakeTicketStoreService = MockRepository.GenerateMock<TicketStoreService>();
fakeTicketStoreService.Expect(service => service.DoSomething(Arg.Is(new Guid()))).Return(new Guid());
fakeTicketStoreService.DoSomething(Arg.Is(new Guid()));
fakeTicketStoreService.VerifyAllExpectations();
}
public class TicketStoreService {
public Guid DoSomething(Guid guid) { return guid; }
}
看起来这里还发生了其他事情。你能发布一个独立的,最小的案例来重现这个吗
最后,您提到的所有库都是开源的,所以最好选择您最喜欢的库,看看是否可以改进错误消息或性能。如果您以前没有对开源做出过贡献,这可能会让人感到有点畏缩,但参与项目的人通常都非常乐意尝试帮助对合作感兴趣的人分配:)
- (我想这是它现在的家)
[Test]
public void FieldTest() {
var fakeTicketStoreService = MockRepository.GenerateMock<TicketStoreService>();
fakeTicketStoreService.Expect(service => service.DoSomething(Arg.Is(new Guid()))).Return(new Guid());
fakeTicketStoreService.DoSomething(Arg.Is(new Guid()));
fakeTicketStoreService.VerifyAllExpectations();
}
public class TicketStoreService {
public Guid DoSomething(Guid guid) { return guid; }
}
看起来这里还发生了别的事情。你能发布一个独立的,最小的案例来复制这个吗
最后,您提到的所有库都是开源的,因此最好选择您最喜欢的库,看看是否可以改进错误消息或性能。如果你以前没有对开源做出过贡献,这看起来有点让人望而生畏,但参与项目的人通常非常乐意尝试帮助任何有兴趣贡献的人。:)
- (我想这是它现在的家)