我嘗試將 Pitest 應用于依賴時區設定的舊專案。有些測驗專門針對夏令時問題,即一年中的某些日子在當地時間多于或少于 24 小時。我無法更改代碼或測驗。
這些測驗在 Pitest 中失敗,但在其他情況下運行良好。
據我所知,JUnit/Surefire 考慮了user.timezone在 Maven POM 中設定的全域屬性,但 Pitest 沒有。
<properties>
<argLine>-Duser.timezone=Europe/Berlin</argLine>
<properties>
此外,如果直接在命令列上設定,因為mvn verify -Duser.timezone=Europe/Berlin ...它不起作用。
對我來說可能的解決方法是:
- 排除受影響的測驗類
TZ=Europe/Berlin在系統級別設定
我很樂意了解以 Pitest 選擇的方式設定時區的其他可能性。
為了完整起見,這是我第一個使用 Maven 組態檔的方法,以便 Pitests 在以下位置運行mvn verify -P mutation-testing:
<profile>
<id>mutation-testing</id>
<build>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.8.0</version>
<executions>
<execution>
<goals>
<goal>mutationCoverage</goal>
</goals>
</execution>
</executions>
<configuration>
<timestampedReports>false</timestampedReports>
</configuration>
<dependencies>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-junit5-plugin</artifactId>
<version>0.16</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
也許通過jvmArgsPitest 的配置是可能的?如何?
請注意,我是 Pitest 和突變測驗的新手,所以也許我做了一些愚蠢的事情。
uj5u.com熱心網友回復:
為了插入突變體,使它們彼此隔離并處理突變體可能導致的無限回圈,pitest 必須在子行程中運行代碼。
可以使用jvmArgs引數將配置傳遞給它們。
<jvmArgs><value>-Duser.timezone=Europe/Berlin</value></jvmArgs>
將在所有 ptest 啟動的 jvm 中設定時區。
順便說一句,如果您的代碼根據時間和日期做出決定,那么將其作為可以注入的代碼的顯式依賴項通常是一個好主意(例如,使用 a java.time.Clock)。這種方式測驗可以以細粒度的方式操縱時間,并且不需要依賴全域設定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/493531.html
上一篇:如何解決java.lang.NoClassDefFoundError:io/cucumber/core/runtime/TypeRegistryConfigurerSupplier例外
