Настройка PITest для гуавы
Я пытаюсь настроить PIT для Guava ( http://pitest.org/), чтобы выполнить тестирование на наличие мутаций, но я получаю следующую ошибку при попытке запустить его. Это ошибка, которую я получаю:
12:19:47 PM PIT >> INFO : Sending 32 test classes to minion
12:19:47 PM PIT >> INFO : Sent tests to minion
12:19:48 PM PIT >> INFO : MINION : 12:19:48 PM PIT >> INFO : Checking environment
12:19:48 PM PIT >> INFO : MINION : 12:19:48 PM PIT >> INFO : Found 40 tests
12:19:48 PM PIT >> INFO : MINION : 12:19:48 PM PIT >> INFO : Dependency analysis reduced number of potential tests by 0
12:19:48 PM PIT >> INFO : MINION : 12:19:48 PM PIT >> INFO : 40 tests received
12:19:53 PM PIT >> INFO : MINION : Dec 06, 2016 12:19:53 PM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
12:19:54 PM PIT >> INFO : MINION : 12:19:54 PM PIT >> WARNING : More threads at end of test (7) testCantRemove(com.google.common.collect.AbstractIteratorTest_gwt) than start. (5)
/
-
|
/
\
-12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractIteratorTest_gwt, name=testCantRemove(com.google.common.collect.AbstractIteratorTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractIteratorTest_gwt, name=testDefaultBehaviorOfNextAndHasNext(com.google.common.collect.AbstractIteratorTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractIteratorTest_gwt, name=testDefaultBehaviorOfPeek(com.google.common.collect.AbstractIteratorTest_gwt)] did not pass without mutation.
/12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractIteratorTest_gwt, name=testDefaultBehaviorOfPeekForEmptyIteration(com.google.common.collect.AbstractIteratorTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractIteratorTest_gwt, name=testException(com.google.common.collect.AbstractIteratorTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractIteratorTest_gwt, name=testExceptionAfterEndOfData(com.google.common.collect.AbstractIteratorTest_gwt)] did not pass without mutation.
\12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractIteratorTest_gwt, name=testReentrantHasNext(com.google.common.collect.AbstractIteratorTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractIteratorTest_gwt, name=testSneakyThrow(com.google.common.collect.AbstractIteratorTest_gwt)] did not pass without mutation.
/
|
/
|
/12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractMapEntryTest_gwt, name=testEquals(com.google.common.collect.AbstractMapEntryTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractMapEntryTest_gwt, name=testEqualsNull(com.google.common.collect.AbstractMapEntryTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractMapEntryTest_gwt, name=testHashCode(com.google.common.collect.AbstractMapEntryTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractMapEntryTest_gwt, name=testHashCodeNull(com.google.common.collect.AbstractMapEntryTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractMapEntryTest_gwt, name=testToString(com.google.common.collect.AbstractMapEntryTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractMapEntryTest_gwt, name=testToStringNull(com.google.common.collect.AbstractMapEntryTest_gwt)] did not pass without mutation.
|12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractSequentialIteratorTest_gwt, name=testBroken(com.google.common.collect.AbstractSequentialIteratorTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractSequentialIteratorTest_gwt, name=testDoubler(com.google.common.collect.AbstractSequentialIteratorTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractSequentialIteratorTest_gwt, name=testEmpty(com.google.common.collect.AbstractSequentialIteratorTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> WARNING : Description [testClass=com.google.common.collect.AbstractSequentialIteratorTest_gwt, name=testSampleCode(com.google.common.collect.AbstractSequentialIteratorTest_gwt)] did not pass without mutation.
12:19:54 PM PIT >> INFO : Calculated coverage in 9 seconds.
Exception in thread "main" org.pitest.help.PitHelpError: All tests did not pass without mutation when calculating line coverage. Mutation testing requires a green suite.
See http://pitest.org for more details.
at org.pitest.coverage.execute.DefaultCoverageGenerator.verifyBuildSuitableForMutationTesting(DefaultCoverageGenerator.java:109)
at org.pitest.coverage.execute.DefaultCoverageGenerator.calculateCoverage(DefaultCoverageGenerator.java:94)
at org.pitest.coverage.execute.DefaultCoverageGenerator.calculateCoverage(DefaultCoverageGenerator.java:49)
at org.pitest.mutationtest.tooling.MutationCoverage.runReport(MutationCoverage.java:110)
at org.pitest.mutationtest.tooling.EntryPoint.execute(EntryPoint.java:103)
at org.pitest.mutationtest.tooling.EntryPoint.execute(EntryPoint.java:45)
at org.pitest.mutationtest.commandline.MutationCoverageReport.runReport(MutationCoverageReport.java:76)
at org.pitest.mutationtest.commandline.MutationCoverageReport.main(MutationCoverageReport.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
По сути, либо PIT не обнаруживает тесты, либо тесты не работают должным образом с PIT, и все тесты не проходят. Я прочитал этот пост: тесты JUnit пройдены, но PIT говорит, что набор не зеленый, и я думаю, что "ваша кодовая база включает изменяемое статическое состояние? (Например, в синглетах)" - это проблема, но я понятия не имею, как это исправить. В случае, если у комплекта тестов есть некоторая скрытая зависимость порядка, как сделать так, чтобы я мог запустить PIT на нем? Или набор тестов просто несовместим с PIT?
1 ответ
Проблема, скорее всего, в том, что PIT выполняет тестовые случаи GWT - это не модульные тесты в обычном смысле этого слова, так как код не выполняется внутри JVM, а вместо этого транслируется в сценарий Java и запускается в браузере.
PIT работает только с кодом, который выполняется в той же JVM, что и тесты, которые его выполняют.
Если исключить тестовые примеры guava gwt, PIT будет более счастливым.