簡體   English   中英

測試TestNG偵聽器

[英]Testing TestNG listeners

我有一個測試A,該測試以編程方式運行另一個測試B,並且僅當測試B失敗時,測試A才通過。 我希望構建僅在測試A通過時才能成功。

精確地,我實現了TestNG偵聽器( MyListener )。 我需要驗證它是否正確處理了失敗的測試結果。 測試它的唯一方法似乎是使測試A( testListener )以編程方式運行另一個測試B( AlwaysFailingTest )並檢查結果。

@Test
public void testListener() {
    System.setProperty("knownBugs", "execute");
    tla = new TestListenerAdapter();
    TestNG testng = new TestNG();
    testng.setTestClasses(new Class[]{AlwaysFailingTest.class});
    testng.addListener(tla);
    testng.addListener(new MyListener());
    testng.run();
    assertThat(tla.getSkippedTests().size(), equalTo(0));
    assertThat(tla.getFailedTests().size(), equalTo(1));
    assertThat(tla.getPassedTests().size(), equalTo(0));
}

但是,我不希望故意失敗的測試影響我的庫的測試結果。 當前,對於mvn clean test是這樣的:

Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.407 sec <<< FAILURE!
shouldAlwaysFail(com.testing.listeners.MyListenerTest$AlwaysFailingTest)  Time elapsed: 0.01 sec  <<< FAILURE!
java.lang.AssertionError: Failing as always
        at org.testng.Assert.fail(Assert.java:94)
        at com.testing.listeners.MyListenerTest$AlwaysFailingTest.shouldAlwaysFail(MyListenerTest.java:99)

testListener()方法正在傳遞,這很好,但是為什么我總是不理解AlwaysFailingTest結果出現在庫測試結果中的原因。 我該如何避免呢?

在這里列出了MyListenerMyListenerTest完整代碼。

shouldAlwaysFail被執行兩次:一次由主測試套件執行,一次由testListener測試編程testListener 由於它總是失敗,因此主測試套件結果將包含失敗。 要解決此問題,您可以從主測試套件中排除shouldAlwaysFail測試,以使其僅以編程方式由testListener測試運行。

您可以配置Maven Surefire排除測試:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19.1</version>
        <configuration>
          <excludes>
            <exclude>**/AlwaysFailingTest.java</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

或配置TestNG以排除測試:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="SuiteName" verbose="1">
    <test name="TestName">
        <packages>
            <package name="com.testing.listeners"/>
        </packages>
        <classes>
            <class name="com.testing.listeners.AlwaysFailingTest">
                <methods>
                    <exclude name="shouldAlwaysFail"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>

有關更多詳細信息,請參見Maven Surefire插件-測試和/或TestNG文檔的 包含和排除 -3-testng.xml

您為什么不使用@Test批注的“ expectedExceptions”屬性,以便測試將期望它始終失敗並且不會停止執行。

@Test(expectedExceptions=AssertionError.class)
    public void test(){
        Assert.fail();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM