问题标签 [springmockito]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
92 浏览

spring-boot - 如何在 Spring Boot 中对代码块进行单元测试

我在使用 junit 和 mockito 编写的 spring boot 中进行了单元测试。我的方法使用了将代码块作为输入并执行所需功能的方法。下面是代码示例。

此代码运行良好,但代码覆盖率非常低,因为代码块未执行。有什么方法可以执行代码块并增加覆盖率。

0 投票
3 回答
2340 浏览

java - 如何在 Spring Boot 中使用 @ConfigurationProperties 模拟类

我有一个使用@ConfigurationProperties 自动连接另一个类的类。

带有@ConfigurationProperties 的类

Autowires 类 SomeProperties 之上的类

现在,我想测试SomeService类,在我的测试类中,当我模拟SomeProperties类时,我得到null了所有属性的值。

测试班

如何模拟具有文件属性的SomePropertiesapplication-test.properties

0 投票
1 回答
75 浏览

mockito - PowerMockito 在定义第二个“when”子句时调用 Mocked Object 上的真实方法

当使用不同的参数调用方法时,我试图定义一些不同的模拟行为。不幸的是,我发现第二次尝试在(模拟)类上模拟给定方法时,它运行实际方法,导致异常,因为匹配器不是有效参数。任何人都知道我可以如何防止这种情况?

0 投票
1 回答
37 浏览

java - Mockito 不会使用“when()”模拟方法调用

我正在使用 SpringBoot 构建一个 REST Api。我有三个班级ProductControllerBackendServiceSquareService。所有这些类都有一个名为 的方法postProduct(ProductRequestBody request),它根据我们正在谈论的确切方法返回不同的类型。因此,ProductController.postProduct(...)调用BackendService.postProduct()BackendService.postProduct()调用SquareService.postProduct(),如下面的流程图所示:

我的 API 中的 POST 请求剖析

这是Controller看起来的样子:

你可以看到BackendService.postProduct()上面的调用: final BackendServiceResponseBody backendResponse = backendService.postProduct(request);

我已经成功地使用 Mockito 通过一个名为的类来模拟该调用ControllerPostTests

这个测试,连同一个更人为的测试,完美地工作,并且也通过了(耶!)。

现在,怎么样BackendService?我也想模拟它SquareService来调试它,而且我还必须模拟一个名为的类LiteRepository,它实际上是一个JPARepository

让我感到困惑的是,在一个单独的测试文件中,我遵循了与在.ProductControllerTestsSquareService.postProduct(...)

!我已经能够确定代码肯定会通过 IntelliJ 调试器进入该方法。这条线when(squareService.postProduct(request)).thenReturn(expected);似乎不起作用

我在这里做错了什么?

// 编辑:改进的图像。

0 投票
1 回答
149 浏览

spring - Mockito @Spy 在定义模拟行为时调用真实方法

我有一个由控制器和服务层组成的常见 Spring Boot 应用程序。不涉及数据库,因为我使用另一个 rest api 来存储数据。

现在我想要我的控制器,因此我想部分地模拟我的服务。部分原因是我有一种方法可以接受 dto 并将其转换为我的业务模型。我知道这也可以通过业务模型的构造函数来解决,但无论如何我遇到了以下问题:

代码

控制器

测试

在我的测试方法中,我定义:

问题:

我希望虽然在我的测试中没有定义 doSomething,但将 userDto 转换为 keycloak 表示是由原始方法完成的。当我在控制器中调试时,这似乎起作用,keycloakUserRepresentation 具有正确的值。问题是在下一步中

createNewUser

方法没有被存根/模拟。执行了原始方法,因此我的测试失败了。我想要的是,当我在我的测试用例中提供一个 doSomething 方法时,我希望原始方法被模拟。

0 投票
0 回答
22 浏览

springmockito - 如何在 mockito 中执行 catch 块以进行代码覆盖?

我要执行 catch 块以实现 90% 的声纳覆盖率。这是代码


我尝试了以下方法,

它抛出 invocationTget 异常而不是去那个 catch 块。在那个 innerMethod 中,一些 DB 连接带有 try-catch 块。

如何执行那个 catch 块?谁可以帮我这个事?

0 投票
0 回答
473 浏览

spring-boot - 如何对 Spring-Boot Application main() 方法进行单元测试以获取 Jacoco 测试覆盖率

如何使用 SpringApplication.run() 对 Spring-Boot Application main() 方法进行单元测试。我想知道是否有可能在这个类上获得 Jacoco 测试覆盖率。(否则我会排除它)

这个问题和这个问题类似,但又不一样:Spring Boot, test main application class

我正在使用mockito-core3.8 和mockito-inline.

该测试代码对我有用,但 Jacoco 没有将其作为测试覆盖率:

Jacoco 不能显示静态方法的覆盖范围吗?

0 投票
1 回答
29 浏览

spring-boot - JUnit5 中的 when(...).thenReturn(...) 哪个是 Mockito 的正确位置?测试本身或@BeforeClass/@BeforeEach 块?

任何人都可以解释我是否有区别:

和这个:

}

我明白,显然在第一种情况下 when(...).thenReturn() 将在每次测试之前运行,而在第二种情况下只会运行一次。但这是唯一的考虑吗?

此外,是否有必要让它运行不止一次?我应该在每种方法之后进行任何清理吗?

0 投票
1 回答
1590 浏览

spring - Spring Boot - 无法模拟 MongoTemplate

我在要测试的服务中有一个方法,它使用MongoTemplate,如下所示:

然后我试图用 mongo 模板的模拟方法测试这个方法:

我已经阅读了这个问题,但是当我尝试标记为解决方案的答案时,它说 MongoTemplate 无法初始化。我更喜欢模拟这个而不是使用和嵌入数据库,因为我可以使用的库受到限制。

我的错误:

0 投票
1 回答
121 浏览

spring-boot - 使用 spring-retry 进行 SpringBoot 测试

我有以下功能(功能并不重要):

你可以想象它正在做一些 API 调用,返回一些对象的列表等。我可以很容易地在测试中模拟这个函数,如下所示:

但是在我在混合中引入(重试/恢复)之后,该模拟现在正在抛出 org.mockito.exceptions.misusing.NotAMockException at .... 知道为什么吗?

这是弹簧重试的代码:

代码有效,功能强大,只是测试的模拟现在被打破了。将不胜感激一些帮助