我已经阅读了this article以及其他一些关于测试的内容,我认为我理解了理论,但不了解真正的.NET项目中的实现。
我的项目在多个(功能)程序集中分解,我希望对其进行测试。我的大多数方法和属性都是私有或内部的,因此我无法从我的测试程序集中访问它们。 我只测试公共的(为了测试我的装配的所有路径)。
我想知道我正在进行的测试,因为这些测试不是单元测试,因为我正在使用其他服务,如数据库或Microsoft HPC等其他服务......我是对的吗?在我看来,如果我想做一些单元测试,我必须测试私有方法和属性,这是有争议的。
我正在使用Nunit,我想知道我是否可以在框架中进行集成测试和单元测试?
是否有任何.NET开源项目包含我可以查看的单元测试和验收测试?
由于
答案 0 :(得分:1)
很多问题......
public / private :通常,您只想通过公共接口进行测试。如果你想测试一个私有方法,它可能表明你应该将类拆分为两个,让私有方法变为公共方法(或内部方法)。 SRP。要测试内部方法,check this answer。
编写测试时,您需要测试系统的行为。通过行为,考虑从最终用户看到的系统行为(尽管可能还有其他有趣的利益相关者)。如果你这样做,你很少遇到想要测试私有方法的问题。
单元测试与集成测试之间的区别是有争议的,在我看来,这不是一个非常重要的辩论。更重要的是问问自己,测试的目的是什么?
如果您的目的是测试您的系统(而不是与外部系统集成),那么您的测试应该是可重复的,快速的并且不包括您不拥有的任何内容。具有可重复性,我的意思是,如果测试失败,一旦它应该总是失败(没有随机性)。快速,我的意思是你不必等待太久的反馈来运行你所有的测试。根据您拥有的内容,我的意思是测试不应该因组织外部的更改而失败。如果您可以实现此目的并仍然包括对数据库和/或Microsoft HPC的调用,那么我没有看到任何原因。
要在 NUnit 中区分不同的测试类型,可以使用categories。大多数工具允许您根据这些工具运行子集。
答案 1 :(得分:0)
抱歉,我必须介入Torbjörns的回答。
单元测试和集成测试之间存在巨大差异,不能仅使用类别进行处理。只需考虑集成测试中所需的所有引用或依赖项。曾经尝试在构建机器上运行集成测试的人可以告诉你这个故事。
经验法则:不要混淆单元测试和集成测试。 您可以重用相同的测试运行器,如NUnit,但您必须拆分测试项目。
P.S。:欢迎来到TDD之旅!