Spring   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了java – 从可执行jar运行spring测试大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一些Spring测试可以启动应用程序上下文并测试一些服务.我可以使用Maven和IDE运行这些测试.现在我需要在无法访问Maven的其他机器上运行这些测试.我的想法是创建一个测试jar并通过命令行运行它们.

所以我创建了一个自定义Runner来调用我需要的测试类,这些测试将启动Spring Application上下文并测试一些服务.

以下是示例代码

我的自定义亚军:

public class Main {

    public static void main(String[] args) {
        System.out.println("Running tests!");
        JUnitCore ENGIne = new JUnitCore();
        ENGIne.addListener(new TextListener(System.out));
        ENGIne.run(SpringSampleTest.class);
    }
} 

上面的跑步者正在调用此测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfig.class})
public class SpringSampleTest {
    @Autowired
    Testservice testservice;

    @Test
    public void testSimple() {
        assertTrue("Test Simple",testservice.isValid());
    }
}

这是我的配置和服务

@Configuration
@ComponentScan(basePackages = {"mypackage"})
public class AppConfig {

}

@service
public class Testservice {

    public Boolean isValid() {
        return true;
    }
}

所以要从jar运行这些测试,我已经使用assembly-plugin来创建一个包含我所有测试和依赖项的可执行jar(感谢这个答案here).现在,当我运行这个可执行jar时,我的自定义运行器(Main.java)能够触发测试,但是它没有加载Spring Context并且因为我的依赖项没有自动装配而失败并出现NullPointer异常.这是日志:

Running tests!
Sep 05,2018 5:15:01 PM org.springframework.test.context.support.DefaultTESTContextBootstrapper getDefaultTestExecutionListenerClassNames
INFO: Loaded default TestExecutionListener class names from LOCATIOn [@R_404_1979@-INF/spring.factories]: []
Sep 05,2018 5:15:01 PM org.springframework.test.context.support.DefaultTESTContextBootstrapper getTestExecutionListeners
INFO: Using TestExecutionListeners: []
.E
Time: 0.007
There was 1 failure:
1) testSimple(com.c0deattack.cu.runners.SpringSampleTest)
java.lang.NullPointerException
    at com.c0deattack.cu.runners.SpringSampleTest.testSimple(SpringSampleTest.java:19)
    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.springframework.test.context.junit4.statements.RunBeforeTestMethodCallBACks.evaluate(RunBeforeTestMethodCallBACks.java:75)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallBACks.evaluate(RunAfterTestMethodCallBACks.java:86)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
    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.springframework.test.context.junit4.statements.RunBeforeTESTClassCallBACks.evaluate(RunBeforeTESTClassCallBACks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTESTClassCallBACks.evaluate(RunAfterTESTClassCallBACks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    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.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:105)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:94)
    at com.c0deattack.cu.runners.Main.main(Main.java:15)

@R_445_4895@!!!
Tests run: 1,@R_445_4895@: 1

有人可以指出我做错了什么吗?

我还添加了我的pom.xml和汇编描述符文件

的pom.xml

<><><><><><><><><><><><><><><><><><><>@H_618_80@<><><><>@H_618_80@<><><>@H_618_80@<>

descriptor – assembly.xml

<><><><><><><>

您可以在github:https://github.com/SaiUpadhyayula/executabletests中查看示例项目

最佳答案
我刚刚分叉你的存储库,我发现了错误.弹簧工厂必须与maven抛出测试时使用的工厂相同.以与测试上下文相同的方式委托Spring Ic是必须的.

请参阅拉取请求获取附加信息:

https://github.com/SaiUpadhyayula/executabletests/pull/2

java  – 从可执行jar运行spring测试

java  – 从可执行jar运行spring测试

java  – 从可执行jar运行spring测试

大佬总结

以上是大佬教程为你收集整理的java – 从可执行jar运行spring测试全部内容,希望文章能够帮你解决java – 从可执行jar运行spring测试所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。