我与一名程序员同事讨论关于仅修改一段可工作的代码以使其可测试(例如通过单元测试)是好是坏的做法。
我的观点是,在保持良好的面向对象和软件工程实践的范围内(当然不要“公开一切”等),这是可以的。
我同事的观点是,仅出于测试目的修改代码(有效)是错误的。
只是一个简单的示例,请考虑某些组件(用C#编写)使用的这段代码:
public void DoSomethingOnAllTypes()
{
var types = Assembly.GetExecutingAssembly().GetTypes();
foreach (var currentType in types)
{
// do something with this type (e.g: read it's attributes, process, etc).
}
}
我建议可以修改此代码以调出另一个可以完成实际工作的方法:
public void DoSomething(Assembly asm)
{
// not relying on Assembly.GetExecutingAssembly() anymore...
}
此方法接受一个Assembly对象进行处理,从而可以通过您自己的Assembly进行测试。我的同事认为这不是一个好习惯。
什么被认为是良好且常见的做法?
Type
参数而不是用作参数Assembly
。