Почему JMockit генерирует исключение NullPointerException без трассировки стека? - PullRequest
2 голосов
/ 02 декабря 2019

Редактировать: я заметил, что это проблема только в JMockit 1.42 и более поздних версиях, поэтому я открыл проблему здесь

У меня что-то похожее на следующий код

 class Type1 {

 }

 class Type2 {
      private final Type1 TYPE_1;

      Type2(Type1 type1) {
           TYPE_1 = type1;
      }

      // A bunch of methods involving TYPE_1
 }

Я пытаюсь протестировать Type2 с TestNG, имитируя экземпляр Type1 с JMockit. У меня есть следующий тест.

 class Type2Test {
      @Tested
      Type2 type2;

      @Injectable
      Type1 type1;


      @Test
      void randomTestThatShouldPass() {
           Assert.assertTrue(true);
      }
 }

Однако при выполнении этого теста я получаю NullPointerException без видимой трассировки стека. Следующее - это все, что показано на моей консоли.

java.lang.NullPointerException

Я пробовал множество вещей, чтобы решить мою проблему, включая:

  • Превращение TYPE_1 в нефинал
  • Удаление @Injectable из type1 в Type2Test. Это дает мне лучшее сообщение об ошибке, сообщая, что JMockit не может создать экземпляр type2, потому что нет @Injectable экземпляров, чтобы вызвать конструктор для Type2
  • Изменено @Injectable на @Mocked
  • Переключение сред. Одинаковые проблемы возникают как в VSCode, так и в Intelij
  • Использование Gradle вместо Maven

Единственное, что решает его, - это удаление всех аннотаций JMockit, что не помогает. Что я делаю неправильно в моей настройке теста?

Редактировать: отвечая на комментарий paulsm4, я не использую Spring, но я использую Maven 3.5.3 со следующим pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>ok.ubc.cosc.VisualizeCode</groupId>
  <artifactId>VisualizeCode</artifactId>
  <packaging>jar</packaging>
  <version>1.0</version>
  <name>VisualizeCode</name>
  <url>http://maven.apache.org</url>
  <build>
       <plugins>
            <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>3.8.1</version>
                 <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                 </configuration>
            </plugin>
       </plugins>
 </build>
 <dependencies>
      <dependency>
           <groupId>org.testng</groupId>
           <artifactId>testng</artifactId>
           <version>6.14.3</version>
           <scope>test</scope>
      </dependency>
      <dependency>
           <groupId>org.jmockit</groupId>
           <artifactId>jmockit</artifactId>
           <version>1.48</version>
           <scope>test</scope>
      </dependency>
 </dependencies>
 </project>
...