Mockito是Java的模拟框架。它的灵感来自EasyMock,但旨在进一步简化模拟存根,验证和工具。
我正在开发一个项目。该项目有一个存储库(UserRepository),该存储库被项目的其他部分引用,我想知道是否每次都必须测试存储库方法
我有一堂这样的课: 公共类 CloudFormationManager { 私有静态CloudFormationManager cloudFormationManager; 私有最终 AmazonCloudFormation amazonCloudFormation; 公关...
我正在为应用程序创建新的单元测试,但我陷入困境,因为 KeyHolder 没有返回有效的对象。 对于上下文,这是我的课程: ScriptDao 类: @存储库 公开课纸条...
尝试在 Spring Boot junit 中模拟 CacheManager 时出现 NullPointerException
我正在尝试为 CacheManger 编写 junit 测试,该测试在我的代码/项目中与mockito一起使用 但它正在抛出NPE。 这是片段 CacheContextConfig.java: 公共类 CacheContextConfig
我正在 Spring boot 2.7 中手动处理事务: dataHeader = transactionTemplate.execute(状态 -> { 最终 var doc = findDoc(文档); 返回保存报告(doc); }); 私人医生...
“Null”类型不是 flutter 中“Future<bool>”类型的子类型
group('localTodos', () { 最终列表 待办事项 = [ const TodoModel(id: 1, 标题: "测试 Todo 1", 完成: false, userId: 1), 常量 TodoModel...
java.lang.AssertionError:JSON 路径“$.id”没有值
所以我一直在对服务器进行一些测试,但我不断收到此错误 “java.lang.AssertionError:JSON 路径“$.id”没有值 这是我使用过的代码。不知道为什么我...
我想模拟一个挂起函数以永远不返回任何结果。与此类似的是 Single.never() 的用法。 可以吗?
我正在尝试使用 Mockito 进行测试,但出现以下错误 org.mockito.exceptions,误用,错误的返回值类型 这是我正在使用的代码 BegeoRequest begeorequest1 = new BegeoRequest(); 列表&...
JUnit 使用 CompletableFuture.supplyAsync 测试方法调用
在我的类中,我有一个类字段,我正在验证该类字段的方法被调用三次。现在我将逻辑移至“CompletableFuture.sypplyAsync”方法,它......
类我的类{ MyErrorServiceList myErrorServiceList; // myErrorServiceList 由一些复杂的方法调用初始化 公共布尔 processErrorServiceList() { 如果(
测试文件包含 从 lib.sync_mdl_status 导入 update_mdl_status def test_status_updater_mdl(自身): mock_mdl_http_get = patch('lib.sync_mdl_status.http.get').start() 模拟_mdl_http_get。
Eclipse Mockito 调试;不会在 sied beans 的断点处停止
我在使用 Eclipse 调试基于 Mockito 的单元测试时遇到问题。测试工作正常,但我无法介入监视代码或在任何断点处停止。调试器在 IntelliJ 中工作正常,但在
我有一个测试文件status_update/tests/test_status_update.py,其中包含以下内容 ` 从 lib.sync_mdl_status 导入 update_mdl_status @patch('scripts.aws_secrets.fetch_aws_secret') 定义
所以我使用 MockedStatic<> 来模拟静态方法,但似乎里面的项目仍然被调用?既然如此,嘲讽又有什么意义呢?我有以下设置:
我在为下面的服务层类编写junit mockito测试用例时遇到问题。有人可以帮助我为我编写测试用例吗? 公共类 BigQueryServiceImpl 实现 BigQueryServ...
对 Spring 的新 RestClient Exchange() 方法进行单元测试并进行代码覆盖率
如何对Spring新的RestClient的exchange()方法进行代码覆盖率的单元测试? 我有一个方法可以向另一个第三方服务发起 http post 请求: 公共响应实体 如何使用代码覆盖率对 Spring 新的 RestClient 的 exchange() 方法进行单元测试? 我有一个方法可以向另一个第三方服务发起 http post 请求: public ResponseEntity<String> upload(Path imagePath, Path metadataPath) { MultiValueMap<String, Object> form = new LinkedMultiValueMap<>(); form.add("photo", new FileSystemResource(imagePath)); form.add("metadata", new FileSystemResource(metadataPath)); return restClientBuilderProvider .fotoUploadClientBuilder() .build() .post() .uri(uriBuilder -> uriBuilder.path("/upload").build()) .contentType(MediaType.MULTIPART_FORM_DATA) .body(form) .exchange((clientRequest, clientResponse) -> { InputStream body = clientResponse.getBody(); String bodyString = new String(body.readAllBytes()); if (clientResponse.getStatusCode().isError()) { log.error(UPLOAD_FAILED_ERROR_MESSAGE, imagePath, metadataPath, bodyString); } return ResponseEntity.status(clientResponse.getStatusCode()).body(bodyString); }); } 方法如下fotoUploadClientBuilder: public RestClient.Builder fotoUploadClientBuilder() { return RestClient .builder() .baseUrl(fotoUploadBaseUrl) .defaultHeaders(headers -> headers.setBasicAuth(fotoUploadUsername, fotoUploadPassword)) .requestFactory(fotoUploadClientBuilderFactory); } 以下是单元测试: @Test @SuppressWarnings({"unchecked"}) void uploadFilesNoSuccessfulUploadsInProtocol() { //this first block is not really relevant for the question, its just preparation for the method invocation String year = "2023"; String month = "05"; String day = "04"; FileUpload fileUpload = new FileUpload(); FileUploadProtocol fileUploadProtocol = new FileUploadProtocol(); fileUpload.setFileUploadProtocol(fileUploadProtocol); fileUploadProtocol.setFileUploads(List.of(fileUpload)); Path imagePath = Paths.get("123.jpg"); Path metaPath = Paths.get("123.xml"); Map<Path, Path> uploadFiles = Map.of(imagePath, metaPath); Path imagePath = Paths.get("123.jpg"); Path metaPath = Paths.get("123.xml"); Map<Path, Path> uploadFiles = Map.of(imagePath, metaPath); RestClient.Builder mockedRestClientBuilder = Mockito.mock(RestClient.Builder.class); RestClient mockedRestClient = Mockito.mock(RestClient.class); RestClient.RequestBodyUriSpec requestBodyUriSpec = Mockito.mock(RestClient.RequestBodyUriSpec.class); Mockito.when(restClientBuilderProvider.fotoUploadClientBuilder()).thenReturn(mockedRestClientBuilder); Mockito.when(mockedRestClientBuilder.build()).thenReturn(mockedRestClient); Mockito.when(mockedRestClient.post()).thenReturn(requestBodyUriSpec); RestClient.RequestBodySpec requestBodySpec = Mockito.mock(RestClient.RequestBodySpec.class); ResponseEntity<String> responseEntity = Mockito.mock(ResponseEntity.class); Mockito.when(requestBodyUriSpec.uri(any(Function.class))).thenReturn(requestBodyUriSpec); Mockito.when(requestBodyUriSpec.contentType(MediaType.MULTIPART_FORM_DATA)).thenReturn(requestBodyUriSpec); Mockito.when(requestBodyUriSpec.body(any(Object.class))).thenReturn(requestBodySpec); Mockito.when(requestBodySpec.exchange(Mockito.any())).thenReturn(responseEntity); Mockito.when(responseEntity.getStatusCode()).thenReturn(HttpStatus.BAD_REQUEST); Mockito.when( fileUploadRepositoryMock.findFileUploadByImagePathIsAndStatusIsNotAndYearIsAndMonthIsAndDayIs( imagePath.toString(), HttpStatus.NO_CONTENT.value(), year, month, day ) ).thenReturn(fileUpload); // this method calls the `upload` method I am trying to test with coverage uploadService.uploadFiles(year, month, day, uploadFiles); Mockito.verify(fileUploadRepositoryMock).save(fileUpload); Mockito.verify(fileUploadProtocolRepositoryMock).save(fileUploadProtocol); Assertions.assertThat(fileUploadProtocol.getAmountSuccessfulUploads()).isZero(); 这个单元测试运行良好。我缺少的是链中 exchange 方法调用的覆盖范围,请参见下图: 我知道模拟了 http POST 的整个设置,因为我不想设置模拟网络服务器,因为我没有测试我提供的 api。我使用第三方服务的 api,因此模拟整个请求。 我的问题是如何访问此 lambda 表达式的 clientRequest 和 clientResponse 参数来验证 clientResponse 是否会给我 BAD_REQUEST 状态,或者模拟这两个参数以使响应返回我想要的状态? Mockito.when(requestBodySpec.exchange(Mockito.any())) .thenReturn(responseEntity); 存根方法以始终返回相同的 responseEntity 并完全忽略传递给函数的参数。因此,lambda 表达式中的代码永远不会执行(因为没有人调用它,所以您对方法进行了存根处理,不对参数执行任何操作)。 如果想要覆盖线路,就必须执行线路。您可以在存根时使用 .thenAnswer 方法来手动调用 lambda: when(requestBodySpec.exchange(any())) .thenAnswer(a -> { final RestClient.RequestHeadersSpec.ExchangeFunction<String> lambda -> a.getArgument(0); return lambda.exchange(yourClientRequest, yourClientResponse); // call the lambda }); 但我怀疑此类测试的用处。当你模拟 99-100% 的方法时,你真正在测试什么?该方法看起来应该用“集成测试”来测试。您可以启动本地测试服务器来发送请求,或者您可以使用 Spring 框架提供的功能来更轻松地测试其余客户端交互。
我正在尝试将 Scala 系统移植到 Mockito2。有一些测试用例使用 doReturn,现在在 Mockito 2.18.0 中我收到此错误: 错误:(34, 5) 对重载定义的引用不明确, ...
收到此错误“类型‘Null’不是类型‘Future’的子类型
void main() { 晚期 ApiManager apiManager; 后期 MockHTTPClient mockHTTPClient; 设置(() { 模拟HTTPClient = 模拟HTTPClient(); apiManager = ApiManager(mockHTTPClient); }); 测试( ...