对不起,很长的文章...单元测试“结构”的方法?
虽然被引入到棕色领域的项目,我怀疑某些单元测试和思考。假设你有一个repostory类,包装一个存储过程并在开发人员指南中包含一些特定的准则(规则),描述应该如何构造这个类。类可能看起来像以下:现在
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 + reflection创建约定样式的测试?
在此先感谢。
我会标记为答案您的回复。希望对测试商业价值与代码结构进行更多的讨论。但是我对下一个代码审查有一点点意见。 – jaspernygaard