【问题标题】:Eclipse junit testing in the same projectEclipse junit 测试在同一个项目中
【发布时间】:2011-04-04 04:23:22
【问题描述】:

这是一个相对开放的问题。如果我在 Eclipse 的项目中构建了一个应用程序,然后我想测试这个项目,我应该在同一个项目中创建 JUnit 代码还是创建一个单独的项目。比如……

ShopSystem 可能是我的主要项目的名称 - 我应该创建一个名为 ShopSystemTest 的项目吗?

一般来说 - 测试代码应该存储在离项目主文件夹“多远”的地方?如果我将测试代码存储在主项目中,然后将主项目导出为可运行的 jar,它将带走测试代码,这并不理想......

建议?

【问题讨论】:

    标签: java eclipse junit


    【解决方案1】:

    我非常喜欢 maven 约定:在同一个项目中,main 和 test 有一个单独的源代码树,主代码被部署,测试代码没有。包结构可以(但不必)相同。

    project
        src
            main
                 java      // source files
                 resources // xml, properties etc
            test
                 java      // source files
                 resources // xml, properties etc
    

    在 Eclipse 中,当您选择 new -> JUnit test case 时,您只需将源文件夹更改为 src/test/java 并保留建议的包。

    (保留在同一个包中的好处之一是可以访问受保护的和包范围的成员,尽管这不是“正确的”单元测试行为)


    更新:这里有一些代码来说明我的最后一点:

    主类(在 src/main/java 中):

    package com.test;
    public class Foo{
    
        static class Phleem{
            public Phleem(final String stupidParameter){
            }
        }
    
        String bar;
        protected String baz;
        protected Object thingy;
    
    }
    

    测试类(在 src/test/java 中):

    package com.test;
    import org.junit.Test;
    
    public class FooTest{
    
        @Test
        public void testFoo(){
            final Foo foo = new Foo();
            foo.bar = "I can access default-scoped members";
            foo.baz = "And protected members, too";
            foo.thingy = new Foo.Phleem("And I can access default-scoped classes");
        }
    
    }
    

    【讨论】:

    • “访问受保护和包范围的成员” - 要访问受保护的成员,您必须对被测类进行子类化。你的意思是能够访问包范围的类,对吧?
    • 哦,还有会员,当然你是对的。我很少使用默认范围的成员,以至于我有时会忘记它们的存在。
    • 哎哟!我不知道protected 允许从同一个包中的其他类进行访问。好的,这一切都清楚了,谢谢。
    • 是的,整个访问级别的概念相当愚蠢。例如如果不公开类,就无法使子包可以访问包。 scala 有一个更好的系统。
    • @seanizer:我同意。如果 Java 是今天设计的,private 可能是默认值,protected 将只允许从子类访问,会有子包的概念,final 将是类、局部变量甚至成员的默认值。哦,好吧。
    【解决方案2】:

    虽然没有唯一正确的方法,但通常的方法是将单元测试保留在同一个项目中。

    您可以创建第二个源文件夹(如test),您可以在其中将测试类放入与被测类相同的包中。这还允许您测试包私有类,而不会用测试类淹没您的主要源包。

    您的源文件夹/包结构将如下所示:

    -sources
       -main
           -my.package
                 -MyClass.java
       -test
           -my.package
                 -MyClassTest.java
    

    然后,您可以将构建配置为在打包 JAR 时不包含 test 源文件夹。

    【讨论】:

      【解决方案3】:

      考虑 maven 方式:在 maven 项目中,资源是这样组织的

      src
       |--main
       |     |--java
       |--test
             |--java
      

      您的源代码在 src/main/java 中,您的 junit 测试代码在 src/test/java 中,它们都是源文件夹(因此您可以将 jUnit 代码与 Java 代码放在同一个包中,但在不同的源文件夹中)。

      有趣的是,对于通常的编码,您的 jUnit 类位于代码包中,但在创建 jar 时,您可以只获取来自 src/main/java 的类而不发布您的测试。

      【讨论】:

        【解决方案4】:

        通常你有 -

        /src/main/java   (for codes)
        
        /src/test/java   (for tests)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-05
          • 1970-01-01
          • 1970-01-01
          • 2020-04-11
          • 1970-01-01
          • 2011-07-20
          • 2011-04-20
          • 1970-01-01
          相关资源
          最近更新 更多