Noa*_*Gal 5 unit-testing rhino-mocks mocking arcgis
我正在尝试更改ArcGIS的单元测试,并开始使用模拟(我使用rhino).
当我开始编写测试时,我注意到我必须开始模拟很多对象,并且存在很多方法,甚至可以通过单个测试.
例如 - 我的控制器首先得到一个RelationshipClass(所以我需要存根IWorkspace和返回IRelationshipClass),然后得到一个IFeature(存根),最后调用stubRelClass.GetRelatedObjects(stubFeature),返回ISet其他的IFeatures.
为了让它通过,必须存根这么多的对象和方法是否正常?我也觉得我真的需要跨过代码(是的 - 我知道我应该先编写测试,我还在尝试这个),以便弄清楚接下来会发生什么,以及我应该返回什么.
我也有模拟实现多个接口的com类的问题.在生产代码I QI他们之间的接口.如何创建在运行时实现两个接口的模拟?
是的,有时您必须模拟很多对象,具体取决于您的注入链。如果您要深入多个级别,则可能表明存在设计错误 - 依赖于 API 下三层的数据的对象可能不是松散耦合的。您应该能够通过在某个时刻返回某种具有您正在测试的层需要的必要属性的假对象来将链消灭在萌芽状态。
您还应该能够在一个[SetUp]方法中完成大部分模拟,然后让每个测试只更改一两件事。
为了模拟多个接口,Rhino 有 MultiMock 的概念。我相信您所追求的语法是:
var mock =
MockRepository.DynamicMultiMock<MyType>(
typeof(Interface1),
typeof(Interface2),
....);
Run Code Online (Sandbox Code Playgroud)