.net NET项目中单元测试和验收测试的实现

.net NET项目中单元测试和验收测试的实现,.net,unit-testing,testing,nunit,integration-testing,.net,Unit Testing,Testing,Nunit,Integration Testing,我已经阅读了和其他一些关于测试的书籍,我想我已经理解了理论,但没有理解实际.NET项目中的实现 我的项目分解为多个(功能)程序集,我希望对其进行测试。我的大多数方法和属性都是私有的或内部的,因此我无法从测试程序集中访问它们。 我只测试公共路径(以便测试程序集的所有路径) 我想知道我正在做的测试,因为这些测试不是单元测试,因为我正在使用其他服务,如数据库,或其他服务,如Microsoft HPC。。。我说得对吗?在我看来,如果我想做一些单元测试,我必须测试私有方法和属性,这是有争议的 我正在使用N

我已经阅读了和其他一些关于测试的书籍,我想我已经理解了理论,但没有理解实际.NET项目中的实现

我的项目分解为多个(功能)程序集,我希望对其进行测试。我的大多数方法和属性都是私有的或内部的,因此我无法从测试程序集中访问它们。 我只测试公共路径(以便测试程序集的所有路径)

我想知道我正在做的测试,因为这些测试不是单元测试,因为我正在使用其他服务,如数据库,或其他服务,如Microsoft HPC。。。我说得对吗?在我看来,如果我想做一些单元测试,我必须测试私有方法和属性,这是有争议的

我正在使用Nunit,我想知道是否可以将集成测试和单元测试放在框架中

是否有任何带有单元测试和验收测试的.NET开源项目我可以签出

谢谢

很多问题

公共/私有:通常,您只希望通过公共接口进行测试。如果你想测试一个私有方法,这可能是一个迹象,你应该把类分成两部分,让私有方法成为公共的(或内部的)。SRP。要测试内部方法

编写测试时,您希望测试系统的行为。对于行为,考虑从最终用户的角度来看系统的行为(尽管也可能有其他有趣的涉众)。如果您这样做,您很少会遇到想要测试私有方法的问题

单元测试集成测试之间的区别是有争议的,在我看来,这不是一个非常重要的争议。更重要的是问问自己,考试的目的是什么

如果您的目的是测试您的系统(而不是与外部系统集成),那么您的测试应该是可重复的、快速的,并且不包括任何您不拥有的内容。对于repeatable,我的意思是,如果测试失败一次,它应该总是失败(没有随机性)。对于fast,我的意思是您不必等待运行所有测试的反馈太长时间。就你所拥有的而言,我的意思是,测试不应该因为组织外的变化而失败。如果您可以实现这一点,并且仍然包括对数据库和/或Microsoft HPC的调用,那么我看不出有任何理由不这样做


要在NUnit中区分不同的测试类型,可以使用。大多数工具都允许您运行基于这些的子集。

对不起,我必须干预Torbjörns的回答

单元测试和集成测试之间有很大的区别,不能仅用类别来处理。只需考虑集成测试中需要的所有引用或依赖项。曾经尝试在构建机器上运行集成测试的人可以告诉你这个故事

经验法则:切勿混淆单元测试和集成测试。 您可以重用同一个测试运行程序,如NUnit,但必须拆分测试项目

附言:欢迎来到TDD之旅