【发布时间】:2014-02-28 12:07:12
【问题描述】:
我必须测试在 MyMobileApp.MyService.Module 中实现的 IoC 服务。
目前我的单元测试项目 MyMobileApp.MyService.Module.Tests 已在 IoC 模块 MyMobileApp.MyService.Module 上引用
CFTestRunner 用于调试,Visual Studio 测试运行器也可用于运行测试并输出到 GUI 窗口(???)
恕我直言,这种架构有缺点:
- 必须在 [TestInitialize] 中手动初始化服务:
try
{
var module = new Module(); // Drawback: what if 2 services should be used?
module.AddServices();
}
catch (Exception) // Services must be added only once
{
// In TestInitialize
// ClassInitilaize method is not executed if unit test is running under CFTestRunner???
}
this.myService = RootWorkItem.Services.Get();
- 要测试另一个服务实现,我应该更改引用并重新编译测试项目
因此我有一些改进的想法:
使用 ProfileCatalog 的可测试版本允许 IoC 容器自动添加测试服务是否很好?这个 ProfileCatalog 如何正确部署在设备/模拟器上?
在测试类中使用注入服务好不好(如果可能的话)?
我在哪里可以找到具有良好测试模式的示例代码/项目/文章 - 我的意思是测试 IoC 服务
【问题讨论】:
-
您是否研究过 Moq 等 Mocking 框架?
-
.NET CF 不支持生成代理所需的 Reflection.Emit..
-
自己把它们存根怎么样?您的问题似乎与将依赖项注入到您的实际测试代码中有关......在单元测试期间您不应该这样做,因为它们会导致您的测试需要很长时间才能执行。这更像是构建时的集成测试。
标签: c# dependency-injection compact-framework inversion-of-control opennetcf