1

この例によると、テストするコントローラーと同じパッケージに入っています。

なぜそれが必要なのですか?

すべての単体テストをtestingパッケージにまとめたほうがすっきりすると思いますが、問題はありますか?

package com.example.web.controllers;

...imports...

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/testApplicationContext.xml"})
public class HomeControllerSysTest extends AbstractJUnit4SpringContextTests {

    private static final Logger log = Logger.getLogger(
            HomeControllerSysTest.class.getName());
    private final LocalServiceTestHelper helper =
            new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());

    @Before
    public void setUp() {
        helper.setUp();
    }

    @After
    public void tearDown() {
        helper.tearDown();
    }

    @Test
    public void testHomeController() throws IOException {
        final String url = "http://localhost:8080/movie/test";

        final WebClient webClient = new WebClient();
        final HtmlPage page = webClient.getPage(url);
        assertEquals("The Page Title", page.getTitleText());

        // there are many different methods to query everything on your
        // page. Please refer to the HttpUnit homepage
        HtmlElement header = page.getElementsByTagName("h1").get(0);
        assertNotNull(header);

        String headerValue = header.getNodeValue();
        assertEquals(headerValue, "Hello World!");
    }
}
4

3 に答える 3

7

それらを同じパッケージに保持することで、パッケージ プライベート オブジェクトとメソッドのテストが可能になります。物事を整理するには、並列ソース ツリーを作成して、テストを "同じ" パッケージに入れます。

src/
  com/
    example/
      MyClass.java

tests/
  com/
    example/
      MyClassTest.java

両方のソース ツリーを同じ出力ディレクトリにコンパイルするか、クラスパスに追加することができます。これにより、JVM に関する限り、それらは同じパッケージになります。

于 2010-10-23T18:13:57.250 に答える
3

そうでなければなりませんか?いいえ。

それはすべきですか?それがコンベンションです。

本番用に不快な場合、適切な属性を持つ Ant タスクは、プロジェクトをどのように編成しても、すべてのテスト クラスを削除できます。したがって、物理的な場所はこの点ではあまり重要ではありません。

通常の「ソース」の不快感については、テスト ケースを関連するソース コードの近くに置くと、ソース リリースをより簡単に作成できるようになります。

Java にはパッケージ レベルのアクセスがあります (プライベート アクセスとパブリック アクセスに似ています) が、あまり頻繁には使用されないと思います。

大きなことは、単体テストがあることです。残りはそれほど重要ではありません。

于 2010-10-23T18:19:47.317 に答える
2

単体テストは任意のパッケージに含めることができます。本質的には、テスト対象のクラスの動作をテストするために使用される個別のクラスにすぎません。

ここで最も重要な問題は、JUnit テスト クラスの配置が、それらが属するプロジェクトの定数であるということです。つまり、それらは常に同じパッケージにあるか、test という名前のサブパッケージにあるか、完全に別のパッケージにあるかのいずれかです。

私の好みは、最上位の名前を「test」に置き換えて定義された別のパッケージに JUnit テスト クラスを配置することです。そのため、JUnit テスト クラスのorg.util.strings.StingUtil名前はtest.util.StringUtilTest.

このようにして、テスト クラスを見つけるのは非常に簡単で、ライブラリ .jar とそのテスト .jar に簡単に分離できます。また、JUnit テストがテスト対象のクラスへのパッケージ レベルのアクセスを誤って使用するリスクもありません。テスト クラスは、他の世界と同じインターフェイスを使用する必要があります。(私の見解では、特にテスト サポートのためのパッケージ レベルのフックは悪であるため、テストを別の場所に配置して、それらが役に立たないようにすることをお勧めします。)

于 2010-10-23T18:46:18.407 に答える