我有一个Quarkus项目,我将大部分业务逻辑放在服务中,也就是使用@ApplicationScoped注释的可注入bean中,所有CRUD操作都在其中进行。在JAX-RS资源文件本身中,大部分逻辑只是验证,通常使用整个验证bean。这意味着我们需要在测试资源时模拟注入的服务,以防止单元测试成为本质上的集成测试。我们这样做有这样一个结构(示例项目);
文件模拟欢迎服务。java又是这样的:
import io.quarkus.test.Mock;
import javax.enterprise.context.ApplicationScoped;
@Mock
@ApplicationScoped
public class MockGreetingService extends GreetingService {
@Override
public String sayHello(String name) {
return String.format("Hello %s, your id is %s", name, "1234");
}
}
我们的实际项目比这更复杂一点,因为模拟总是返回我们的DTO类,而不管输入如何,但是原理和上面一样。它们完美地用于我们的JAX-RS资源测试。然而,试图测试实际的服务bean本身意味着这个设置有问题。我构建了一个服务测试,它使用与下面代码相同的注释和流程:
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import javax.inject.Inject;
@QuarkusTest
public class GreetingServiceTest {
@Inject
GreetingService greetingService;
@Test
void checkReturnsHello () {
String result = greetingService.sayHello();
System.out.println(result);
Assertions.assertEquals("hello Martin! Your country is Italy", result);
}
}
有了上面类中的依赖注入(我们在资源测试中没有这样做),我希望Quarkus理解我们希望在这个测试中使用原始服务。我真傻。一个简单的日志显示,模拟服务方法确实仍在上面的后一个测试中运行。
现在我想知道——这是在后一个测试中禁用模拟的方法吗?最好不要修改或删除模拟类,尽管我意识到这可能不可能像我想象的那样。提前谢谢!
听起来像是限定符的用例,它使您能够拥有不同的实现bean,并在注入点选择您喜欢的bean类型:https://jakarta.ee/specifications/cdi/2.0/cdi-spec-2.0.html#qualifiers
作为一种选择,您也可以决定自己实例化您的服务,而不是以任何方式使用cdi。
我要从Thorntail搬到Quarkus。在我的测试中,我曾创建一个@deployment方法,在该方法中,我只放置测试所需的内容。特别是,我没有把一个类放在@Startup注释中(因为我不想测试它…)。当我移动到QUARKUS时,我抑制了de@deployment静态方法,然后当我启动测试时@Startup是。。。一开始,发生了很多不好的事情,阻止我测试我想要测试的东西(好吧,它崩溃了,因为它
我面临一个问题,而嘲笑jUnit测试的东西。 情况如下: 类A实现了来自第三方jar的接口,并且需要实现method1。除了method1之外,A还包含method2,它是从method1调用的。method2本身调用一些外部服务。 我想单元测试方法1。 方法1接受输入,比如X。X有一个包裹在里面的输入变量,比如var1。var1由方法1中的逻辑使用,方法1在X中设置另一个变量,比如var2。 所
我在尝试包装我的代码以用于单元测试时遇到了一些问题。问题是。我有接口IHttpHandler: 现在很明显,我将在Connection类中有一些方法,这些方法将从my后端检索数据(JSON)。但是,我想为这个类编写单元测试,显然我不想编写针对真实后端的测试,而是一个被嘲弄的测试。我曾尝试谷歌一个很好的答案,但没有很大的成功。我以前可以并且曾经使用过Moq来模拟,但是从来没有在像HttpClient
我用Mockito进行了Java测试: Kotlin.TypeCastException:null不能强制转换为非null类型java.util.HashMap 如何正确模拟属性?
问题内容: 我正在为启动a 并使用返回的诺言执行一些逻辑的控制器编写单元测试。我可以测试触发$ modal的父控制器,但是我一生无法弄清楚如何模拟成功的诺言。 我尝试了多种方法,包括使用和强制履行承诺。但是,我得到的最接近的结果是与本 SO帖子中的最后一个答案相似的东西。 我已经在“旧的” 模式中看到了几次这样的问题。在“新” 模式下,我找不到太多的方法。 一些指针将不胜感激。 为了说明问题,我使
我在Dart类中有一个方法,它接受< code>BuildContext参数,如下所示: 我想测试该方法是否按预期工作: 当然,它不起作用,因为方法 需要一个参数 类型。此值在整个应用程序本身中都可用,但不确定在我的单元测试中从何处获取该值。