gpt4 book ai didi

java - 在 JUnit 切换到 TestNG 后我的测试不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:53 25 4
gpt4 key购买 nike

我不明白为什么我的代码无法执行 TestNG 测试。同时,当我使用 JUnit 测试(具有相应的 JUnit 依赖项)而不是 TestNG 时,一切都正常。即使我在 IDEA 中使用适当的测试框架(TestNG)重新创建所有测试类,它也不能很好地工作。实际上问题出在 PowerMock 中。

这是我的简单测试代码

public class Employee {
public static int count(){
throw new UnsupportedOperationException();
}
}

我正在测试的服务类

public class EmployeeService {
public int getEmployeeCount(){
return Employee.count();
}
}

最后是我的测试代码

@PrepareForTest(Employee.class)
public class EmployeeServiceTestNGTest {

@Test
public void should_return_count_of_employee_using_the_domain_class() {
PowerMockito.mockStatic(Employee.class);
PowerMockito.when(Employee.count()).thenReturn(1000);

EmployeeService employeeService = new EmployeeService();
Assert.assertEquals(1000, employeeService.getEmployeeCount());
}
}

还有我的 pom.xml 以及所有依赖项:

    <properties>
<powermock.version>1.5.5</powermock.version>
</properties>

<dependencies>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock.version}</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng-common</artifactId>
<version>1.4.11</version>
</dependency>
</dependencies>

我的堆栈跟踪

java.lang.UnsupportedOperationException
at il.arri.powermock.example.Employee.count(Employee.java:9)
at il.arri.powermock.example.EmployeeServiceTestNGTest.should_return_count_of_employee_using_the_domain_class(EmployeeServiceTestNGTest.java:14)

更新

我将测试类更改为

@PrepareForTest(Employee.class)公共(public)类 EmployeeServiceTestNGTest 扩展 PowerMockTestCase {

@Test
public void should_return_count_of_employee_using_the_domain_class() {
PowerMockito.mockStatic(Employee.class);
PowerMockito.when(Employee.count()).thenReturn(1000);

EmployeeService employeeService = new EmployeeService();
Assert.assertEquals(1000, employeeService.getEmployeeCount());
}

@ObjectFactory
public IObjectFactory getObjectFactory() {
return new PowerMockObjectFactory();
}

}

但是仍然有错误:

org.testng.TestNGException: 
An error occurred while instantiating class il.arri.powermock.example.EmployeeServiceTestNGTest: null
at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:398)
at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:299)
at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:115)
at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:200)
at org.testng.internal.TestNGClassFinder.<init>(TestNGClassFinder.java:120)
at org.testng.TestRunner.initMethods(TestRunner.java:409)
at org.testng.TestRunner.init(TestRunner.java:235)
at org.testng.TestRunner.init(TestRunner.java:205)
at org.testng.TestRunner.<init>(TestRunner.java:160)
at org.testng.remote.RemoteTestNG$1.newTestRunner(RemoteTestNG.java:141)
at org.testng.remote.RemoteTestNG$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG.java:271)
at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:575)
at org.testng.SuiteRunner.init(SuiteRunner.java:159)
at org.testng.SuiteRunner.<init>(SuiteRunner.java:113)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1299)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1286)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:125)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.lang.NullPointerException
at org.powermock.core.classloader.MockClassLoader.addClassesToModify(MockClassLoader.java:133)
at org.powermock.modules.testng.internal.PowerMockClassloaderObjectFactory.newInstance(PowerMockClassloaderObjectFactory.java:81)
at org.powermock.modules.testng.PowerMockObjectFactory.newInstance(PowerMockObjectFactory.java:42)
at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:387)
... 26 more

UPD(解决方案):

当我删除这个依赖项时

        <dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng-common</artifactId>
<version>1.4.11</version>
</dependency>

所有作品都是绿色的:)

最佳答案

坦率地说,为了解决我的问题,我需要更改一个 pom.xml 文件,该文件具有冗余依赖项,例如

<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng-common</artifactId>
<version>1.4.11</version>
</dependency>

我还需要添加 PowerMockObjectFactory 支持

@ObjectFactory
public IObjectFactory getObjectFactory() {
return new PowerMockObjectFactory();
}

最后一件事是从 PowerMockTestCase 类扩展。

@PrepareForTest(Employee.class)
public class EmployeeServiceTestNGTest extends PowerMockTestCase {...}

只有在这种情况下,它才能正常工作并且绿色环保。

关于java - 在 JUnit 切换到 TestNG 后我的测试不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com