gpt4 book ai didi

java - java应用程序是否有类似Mockito的框架(不在JUnit/测试环境下)?

转载 作者:行者123 更新时间:2023-11-30 03:09:22 25 4
gpt4 key购买 nike

我正在编写一个基于一些现有代码(这里是A类,模块B)的工具(不用于测试目的),我无法触及这些代码,我想模拟它们的行为。

我正在尝试为我的java应用程序找到类似Mockito的东西,但不在JUnit/测试环境下,或者可以使Mockito在JUnit/测试环境之外工作的解决方案。

这是 A 类:

public final class A{  // I can't touch this class, and I can't touch module B where A is called
public static String getType(String name){
... // DataBase access
}
}

这是我的申请:

public class myApp{
public Object compute(String name){
// execute module B's code, where A is widely called
return computedObject;
}
}

我不想在我的应用程序中访问数据库,我只想在我的java应用程序中模拟A的方法,就像Mockito在JUnit中所做的那样,但我无法使其在JUnit中工作或找到类似的java框架应用程序。

如果我使用 Mockito,那么我就会有

@RunWith(PowerMockRunner.class)
@PrepareForTest(A.class) // does this mean Mockito only works under Testing environment?
public class myApp{
@Test
public Object compute(String name){
// mock A
// call code in module B
return computedObject;
}
}

但是我无法调用测试方法并从我的java应用程序(不是JUnit)获取其返回值,JUnitCore只能执行所有测试而无法返回某些测试方法的值。

I need do exactly the same thing as Mockito but not under Testing environment, I can't modify the class A neither the module B, and in the future I may need to mock the creation of object/mock static method... (same functionality as Mockito), but I don't want to rewrite a Mockito for java application since it will be too costly, so a similar framework working out of JUnit would be great.

有人能给我任何想法吗?

编辑:

我认为我的用例很常见,这样的框架在某些情况下会非常有帮助。

为什么没有这样的框架,是我错过了什么还是犯了一些错误?

最佳答案

如果不能修改“模块 B”(如问题评论中所述),您可以使用字节码检测库,如 ByteBuddy , JavassistCGLIB 。这些库允许您在运行时重写方法的字节代码,通常在 Java 代理中使用。

(顺便说一句,Mockito 正是这样做的。它使用 ByteBuddy 来检测您的类)

关于java - java应用程序是否有类似Mockito的框架(不在JUnit/测试环境下)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33945506/

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