gpt4 book ai didi

maven - Junit- 如何将测试附加到现有流程

转载 作者:行者123 更新时间:2023-12-04 23:28:28 25 4
gpt4 key购买 nike

我有 maven 项目,正在运行 mvn test 在单独的进程中执行测试用例。

我的问题是:是否有任何方法可以通过附加到现有进程来运行测试?这样测试就可以使用附加的进程环境。

我发现 surefire 有 JVM 属性,found here , 但不知道如何设置它,如果这是正确的理解。

更新:由于该项目是基于 SpringBoot 的,所以我像这样执行服务器(说它测试服务器)-

java -jar target/server-0.0.1-SNAPSHOT.jar

并像这样更新 Junit 测试类-

@Before
public void setup() throws Exception {
VirtualMachine virtualMachine = attach(getTestServerVM());
System.out.println(virtualMachine.id());
}

@Test
public void emptyTest() {
Stack<String> stack = new Stack<String>();
assertTrue(stack.isEmpty());
}

private static VirtualMachine attach(VirtualMachineDescriptor virtualMachineDescriptor) {

VirtualMachine virtualMachine = null;

try {
virtualMachine = VirtualMachine.attach(virtualMachineDescriptor);

} catch (AttachNotSupportedException anse) {
System.out.println("Couldn't attach " + anse);
} catch (IOException ioe) {
System.out.println("Exception attaching or reading a jvm." + ioe);
}

return virtualMachine;
}

private static VirtualMachineDescriptor getTestServerVM() {

String name = "target/server-0.0.1-SNAPSHOT.jar";
List<VirtualMachineDescriptor> vms = VirtualMachine.list();

VirtualMachineDescriptor serverVM = vms.stream()
.filter(vm -> name.equals(vm.displayName()))
.findAny()
.orElse(null);

System.out.println("Test server id : " + serverVM.id());

return serverVM;
}

这就足够了吗,还是我需要加载代理?我问这个,因为虽然程序显示 Junit 测试类成功附加,但我看到 Junit 的进程 ID 是这样的(通过运行 JCMD 命令)-

3585 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 55632 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -classNames JunitRnD.J

最佳答案

最后,您会问:我如何注入(inject)任意代码到正在运行的JVM 中。

这在技术上可能是可行的;但需要大量的工作;可能还有肮脏的黑客攻击。为了获得……什么?

长话短说:我认为您应该退后一步,仔细研究您想要这样做的“原因”。然后争取另一种解决方案!

鉴于您的意见:好的单元测试应该关注单元。如果您需要启动并运行“整个堆栈”;那么不要称它们为单元测试;因为他们不是。它们是功能/集成测试!

当你真的想研究单元测试时;然后学习模拟框架……可能还有:如何测试代码。这些videos这是该主题的良好开端。

说真的:附加到 JVM 上运行单元测试不是一个好的答案。相反,退后一步;并研究你的设计;并找到在“较小”范围内对其进行测试的方法。

关于您的第二条评论的另一项更新:如果您真的需要这种级别的“动态”;那么我会建议一些完全不同的东西:集成 Jython进入您的产品;至少对于您的“开发”设置。这将允许您将 jython 脚本(可以调用 all 使用所有 java 类的 python 代码)发送到 JVM 中。

但再次:考虑编写真正的单元测试; 任何应用程序都可以从中受益。我有同事总是告诉我他们在调试问题时需要运行“功能测试”。我,我正在开发相同的软件堆栈;我通常需要日志文件;然后我调整我的单元测试以重现问题;我只需要在游戏后期的“系统时间”在进入现场之前对修复进行最终测试。

但郑重声明:我们的开发系统中也有 jython。是的,即使在您的 JVM 中运行“shell”也很棒

关于maven - Junit- 如何将测试附加到现有流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39297648/

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