抱歉发了这么长的帖子...
在被介绍给一个棕地项目时,我对某些单元测试集和思考什么有疑问。假设您有一个存储库类,包装了一个存储过程,并且在开发人员指南中,有一套特定的指导方针(规则),描述了应该如何构造这个类。该类可能如下所示:
public class PersonRepository
{
public PersonCollection FindPersonsByNameAndCity(string personName, string cityName)
{
using (new SomeProfiler("someKey"))
{
var sp = Ioc.Resolve<IPersonStoredProcedure>();
sp.addNameArguement(personName);
sp.addCityArguement(cityName);
return sp.invoke();
}
} }
现在,我当然会编写一些集成测试,测试 SP 是否可以被调用,以及行为是否符合预期。但是,我会编写单元测试来断言:
- 调用带有输入参数“someKey”的 SomeProfiler 的构造函数
- PersonStoredProcedure 的构造函数被称为
- 存储过程上的 addNameArgument 方法是用参数 personName 调用的
- 存储过程上的 addCityArgument 方法使用参数 cityName 调用
- 在存储过程上调用调用方法 -
如果是这样,除了行为之外,我可能会测试方法的整个结构。我最初的想法是它是矫枉过正的。然而,关于团队强制执行的编码实践,这些测试确保了统一且“正确”的结构,并且下一层被正确调用(从 DAL 到 DB,从 BLL 到 DAL 等)。
在我的例子中,这些类型的测试是针对应用程序的每一层执行的。
后续问题 - SomeProfiler 类的使用对我来说有点像约定 - 相反为此创建显式测试,是否可以通过使用静态代码分析或 unittest + 反射来创建约定样式的测试?
提前致谢。