【问题标题】:Implementation of Unit test and acceptance test in a .NET project在 .NET 项目中实现单元测试和验收测试
【发布时间】:2013-08-16 16:06:26
【问题描述】:

我已经阅读了 this article 和其他一些关于测试的文章,我认为我了解了理论,但不了解实际 .NET 项目中的实现。

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

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

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

有没有我可以查看的带有单元测试和验收测试的 .NET 开源项目?

谢谢

【问题讨论】:

    标签: .net unit-testing testing nunit integration-testing


    【解决方案1】:

    很多问题...

    public/private:通常,您只想通过公共接口进行测试。如果您想测试私有方法,这可能表明您应该将类​​分成两个并让私有方法变为公共(或内部)。建议零售价。测试内部方法,check this answer

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

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

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

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

    【讨论】:

      【解决方案2】:

      抱歉,我必须干预 Torbjörns 的回答。

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

      经验法则:永远不要混淆单元测试和集成测试。 您可以重复使用相同的测试运行程序,例如 NUnit,但您必须拆分测试项目。

      P.S.:欢迎来到 TDD 之旅!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-12
        • 2011-08-23
        • 1970-01-01
        • 2011-12-02
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多