gpt4 book ai didi

c# - 我应该如何正确测试 IoC 服务?

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:56 24 4
gpt4 key购买 nike

我必须测试在 MyMobileApp.MyService.Module 中实现的 IoC 服务。

目前我的单元测试项目 MyMobileApp.MyService.Module.Tests 已经引用了 IoC Module MyMobileApp.MyService.Module

CFTestRunner 用于调试,Visual Studio 测试运行器也可用于运行测试并输出到 GUI 窗口(???)

恕我直言,这种架构有缺点:

  • 必须在 [TestInitialize] 中手动初始化服务:

尝试
{
变种模块=新模块();//缺点:如果应该使用 2 个服务怎么办?
模块.AddServices();
}
catch (Exception)//服务只能添加一次
{
//在测试初始化
//如果在 CFTestRunner 下运行单元测试,则不会执行 ClassInitilaize 方法???
}



this.myService = RootWorkItem.Services.Get();

  • 要测试另一个服务实现,我应该更改引用并重新编译测试项目

因此我有一些改进的想法:

  • 使用可测试版本的 ProfileCatalog 让 IoC 容器自动添加测试服务好吗?这个 ProfileCatalog 如何正确部署到 devcie/emulator 上?

  • 在测试类中使用注入(inject)服务好吗(如果可能的话)?

另外,我在哪里可以找到具有良好测试模式的示例代码/项目/文章 - 我的意思是测试 IoC 服务

最佳答案

通常我会连接所有服务。这允许创建模拟服务并将其注入(inject)到 ServicesCollection 中。然后,我的测试项目通常会包含接口(interface)的多个实现,允许我使用适合给定测试的任何一个。然后,您在 TestInitialize 或 TestClass 构造函数中创建一个注入(inject)适当的项目。您的模块应通过接口(interface)拉取依赖服务,以便在您需要时获取您的测试实例。

如果您查看 CFTestRunner 的源代码,您会发现除了 TestMethod 和 TestInitialize 属性之外,我没有做很多辅助支持。如果需要,您当然可以扩展它,但它如此薄的原因是因为我实际上从来不需要任何其他东西。

您无法真正测试直接模块加载,因为 CFTestRunner 不是 SmartClientApplication,因此永远不会加载 IModuleInfoStore。我想您可以创建一个派生的 CFTestRunner,它是 SmartClientApplication,它允许您为 TestClass 创建一个属性,让您返回一个 IModuleInfoStore

关于c# - 我应该如何正确测试 IoC 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22094783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com