【发布时间】:2011-02-20 12:33:42
【问题描述】:
几周前,我加入了 MEF(组件模型)潮流,现在我将它用于我的很多插件和共享库。总的来说,除了我经常犯的错误导致调试过程令人沮丧之外,这一切都很棒。
无论如何,我的应用程序运行良好,但我的 MEF 相关代码更改导致我的自动构建失败。我的大多数单元测试都失败了,仅仅是因为我正在测试的模块依赖于需要由 MEF 加载的其他模块。我通过绕过 MEF 并直接实例化这些对象来解决这些情况。
换句话说,通过 MEF 我会得到类似的东西
[Import]
public ICandyInterface ci { get; set; }
和
[Export(typeof(ICandyInterface))]
public class MyCandy : ICandyInterface
{
[ImportingConstructor]
public MyCandy( [Import("name_param")] string name) {}
...
}
但在我的单元测试中,我只会使用
CandyInterface MyCandy = new CandyInterface( "Godiva");
此外,CandyInterface 需要连接到数据库,我通过在我的单元测试文件夹中添加一个测试数据库来解决这个问题,并且我让 NUnit 将它用于所有测试。
好的,下面是我关于这种情况的问题:
- 这是一种糟糕的做事方式吗?
- 您是否建议在 [SetUp] 中组成部分
- 我还没有学会如何在单元测试中使用模拟——这是一个很好的例子,我可能想模拟底层数据库连接(以某种方式)只返回虚拟数据而不真正需要数据库?
- 如果您以前遇到过这样的事情,您能提供您的经验和您解决问题的方法吗? (或者这应该进入社区 wiki 吗?)
【问题讨论】:
标签: unit-testing mef system.componentmodel