Java 如何使用Quarkus/Restassed仅为一个测试用例注入模拟

Java 如何使用Quarkus/Restassed仅为一个测试用例注入模拟,java,unit-testing,quarkus,Java,Unit Testing,Quarkus,我正在尝试使用REST assured测试REST控制器(使用Quarkus)端点。我想模拟一个注入到该控制器中的类(理想情况下是使用Mockio),但只针对我的一个测试。或者在每个测试用例中获得不同的行为,而不必为每个测试使用单独的类。我不知道该怎么做 我从文档中看到过这样做: @Mock @ApplicationScoped public class MockExternalService extends ExternalService { @Override publi

我正在尝试使用REST assured测试REST控制器(使用Quarkus)端点。我想模拟一个注入到该控制器中的类(理想情况下是使用Mockio),但只针对我的一个测试。或者在每个测试用例中获得不同的行为,而不必为每个测试使用单独的类。我不知道该怎么做

我从文档中看到过这样做:

@Mock
@ApplicationScoped 
public class MockExternalService extends ExternalService {

    @Override
    public String service() {
        return "mock";
    }
}
但这只允许我对所有测试使用一个mock,而不会像Mockito那样对基于测试的某些行为进行模拟。我想是吧

我尝试创建一个mock并用@mock注释它

    @Mock
    public TableExtractorService tableExtractorServiceMock = Mockito.mock(TableExtractorService.class);;
但当我使用它时,我仍然得到了真正的实现。我在控制器中使用了一个带@Inject注释的构造函数,它接受TableExtractorService

有关更多信息,我使用Restassed进行的测试如下所示:

InputPart filePart = Mockito.mock(InputPart.class);
        Mockito.when(tableExtractorServiceMock.Extract(anyObject())).thenThrow(IOException.class);
        final InputStream inputStream = filePart.getBody(InputStream.class, null);
given()
                .multiPart("file", inputStream)
                .when().post("/document")
                .then()
                .statusCode(500);

该端点调用我试图模拟的服务类,我希望该模拟返回一个异常。

根据,您可以使用NGO或。

注释用于自动初始化模拟(通过合适的测试运行程序,或调用
Mockito.initMocks(this)
)。你不需要
@Mock
Mockito.Mock()
,你只需要其中一个。@Kayaman好的,没有它我就无法进行Mockito。当(myClass.Method())as myClass为空时?模拟并没有注入到构造函数中,而是我的实际实现。如果你试图模拟它,就不要注入它。或者,如果您只想在单个测试中使用mock,则可以单独对其进行模拟。@Kayaman也许这更像是一个放心的问题,我需要模拟它调用的端点所使用的服务类。我更新了这个问题,希望能说明我的意思。也许它不是工作/方法实现这一点的正确工具。我可以构造控制器并在模拟中传递,这是我通常的做法。如果你最终调用了真实的实例,那么你的模拟就不是你想象的那样了。您的示例代码似乎模拟了
InputPart
tableExtractorServiceMock
,但可能您没有将它们注入到它们使用的位置?虽然链接在它们更改时很有用,但答案将毫无价值。你能总结一下重要的部分吗?