【发布时间】:2013-03-27 18:32:22
【问题描述】:
这是一位与我感兴趣的同事实际提出的情况:
public DoSomething()
{
//Do Stuff
var assembly = Assembly.LoadFrom("Path");
//Do More Stuff
}
所以,为了模拟这个,你有两个选择
创建一个internal virtual 方法:
internal virtual IAssembly LoadAssembly(String path){...Load Here...}
或者,添加一个可以传入的新类
public class AssemblyLoader
{
public virtual IAssembly LoadAssembly(String path){...Load here...}
}
这两个选项似乎都有问题,因为第一个似乎应该是私有方法,而第二个似乎是为简单的静态调用创建包装器的过度设计?
所以,我想我会把它带到社区。我正在寻找最实用的方法,同时保持 unit 可测试。
这类似于this SO question,但我真的想更深入地研究它。
【问题讨论】:
-
你不能实现依赖注入吗?如果您以这种方式构建它,它将保持可测试和可维护。虽然它会有点难以阅读。
-
更好的问题是,您在构造函数中放入了多少逻辑?如果您需要对构造函数进行单元测试,这听起来更像是代码异味。
-
投票支持第二个选项。它确实会产生开销,但并不大,而且它服务于“更大的目的”。它干净且易于理解,并且使用自动注册的 DI 容器,您甚至不必在单元测试之外再关心它。
-
@AlG,使用 Assembly.LoadFrom 作为示例不会使这个问题与 实际上试图处理 Assembly.LoadFrom 的问题重复。我>
-
@JustinPihony,您可能可以在Programmers.SE 上进行一些搜索,因为我相信那里有一些类似的主题,有不同的意见。我,一方面,会去依赖注入。你知道这句格言,“计算机科学中的所有问题都可以通过另一个抽象层次来解决……除了抽象层次太多的问题。”
标签: c# unit-testing tdd moq assembly.load