【问题标题】:Creating nunit tests without exporting them with the api创建 nunit 测试而不使用 api 导出它们
【发布时间】:2008-12-31 16:38:12
【问题描述】:

我是使用 nunit 进行单元测试的新手(以及一般的 Java 开发)。在为类上的私有方法创建单元测试时,看起来测试文件必须与被测试的类在同一个包中。避免导出单元测试 API 的典型方法是什么?我可以使类/测试方法受包保护吗?还是开发人员通常有一个单独的发布版本,不包括单元测试文件?

【问题讨论】:

    标签: java unit-testing tdd nunit


    【解决方案1】:

    我可以告诉 IntelliJ 或 Ant 不要在部署中打包 JUnit 测试。我在与源代码不同的目录中进行了测试,这使得它成为可能。

    不要将源类和测试类混在一起。将它们分开,以便您使用的工具/脚本更容易部署。

    【讨论】:

      【解决方案2】:

      测试文件不必与被测试的类在同一个包中。事实上,将测试文件放在一个完全独立的包中是一种很好的做法,允许它们测试公共 API 而无需关心包级实现细节。

      或者,您可以将构建脚本(例如 Nant)设置为在构建发布可执行文件时忽略包含“Test”的文件。

      【讨论】:

        【解决方案3】:

        就我个人而言,我的方法只是测试公开的功能,因此您最终只能测试封装良好的部分。

        这通常会导致我的设计包含功能明确的小类,这些小类更容易测试。

        通常,在进行单元测试时,您不应该关心所测试的内部结构,所以我发现这是处理它的最佳方法。

        我也同意最好将测试代码和生产代码分开。

        【讨论】:

          【解决方案4】:

          将测试源代码保留在应用程序源代码之外。一般来说,只测试暴露的功能。如果您确实需要测试私有行为,请创建一个扩展真实对象并允许公共访问私有行为的测试对象。

          【讨论】:

            【解决方案5】:

            我认为将测试代码移出 CUT(被测类)的包是错误的。在某些时候,您可能想要测试受保护的方法或类,而将您的测试代码放在另一个包中会使这变得困难或不可能。

            更好的解决方案是为您的测试代码创建一个单独的目录,该目录仅反映生产代码的包结构。这是我的工作:

            src/main/java/com/example/Foo.java
            src/test/java/com/example/FooTest.java
            

            然后,当需要打包和部署时,您的构建脚本可以非常简单地忽略 src/test/**。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-07-26
              • 2010-12-31
              • 2023-03-14
              • 2015-08-12
              • 2023-03-28
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多