gpt4 book ai didi

java - 如何编写 Singleton 类 JUnit 测试用例

转载 作者:行者123 更新时间:2023-12-01 18:37:38 26 4
gpt4 key购买 nike

我是 Junit 的新手,我在下面的代码中编写了 Singleton 类 Junit 测试用例,但我遇到了异常,并且循环的第二种方法没有覆盖,有人可以帮助我解决它吗

单例

 public class MSA {
private static final _msa = new MSA(); // TA is a singleton
private ArrayList<MSThread> MSThreads = new ArrayList<MSThread>();

private String msaInfo = null;

public String getMsaInfo() {
return msaInfo;
}

public void setMsaInfo(String msaInfo) {
this.msaInfo = msaInfo;
}

private MSA() {}

public static MSA getInstance() {
return _msa;
}

public void shutdown() {
for (MSThread t: MSThreads) {
t.shutdown();
}
}

测试类

  @Test
public void setMsaInfoTest() throws Exception{
MSA fixture = MSA.getInstance();
fixture.setMsaInfo("sample");
assertTrue(fixture.getMsaInfo() == "sample");
}

@Test
public void testShutdown_1()
throws Exception {
MSA fixture = MSA.getInstance();
fixture.shutdown();
}

错误

java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
at com.verizon.dtix.microsvcagent.MSATest.setMsaInfoTest(MSATest.java:131)
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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

最佳答案

如果您使用 Maven,则可以在 pom.xml 中指定仅在单个线程上运行的测试类。这是在 Java 中使用单例运行单元/集成测试的更简单、更安全的方法之一。您可以在 pom 的插件部分执行此操作:

    <configuration>
<forkCount>1</forkCount>
<reuseForks>false</reuseForks>
<parallel>classes</parallel>
<reuseForks>false</reuseForks>
<parallel>none</parallel>
</configuration>

<executions>
<execution>
<id>single-thread-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>*/YourTestClassName.java</include>
</includes>
<threadCount>1</threadCount>
</configuration>
</execution>
</executions>

关于java - 如何编写 Singleton 类 JUnit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60004874/

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