所以,我的问题是,我正在尝试为我的应用程序进行单元测试。我有两个服务,我们叫它们Foo和Bar,Foo只是Bar的代理。
因此,Foo服务的路由器如下所示:
fun fooRoute(...) = coRouter {
. . .
GET("/something", fooHandler::findSomething)
. . .
}
向Bar服务发出请求的处理程序如下所示:
fun fooHandler(barClient: WebClient) {
. . .
suspend fun findSomething(request: ServerRequest): ServerResponse {
val response = barClient.get()
.uri(...)
.accept(...)
.awaitExchange()
. . .
return when (response.statusCode()) {
HttpStatus.OK -> {
ServerResponse
. . .
.bodyValueAndAwait(response.awaitBody<SomeType>())
}
else -> {
ServerResponse
. . .
.buildAndAwait()
}
}
}
. . .
}
当我这样写测试时:
. . .
private val barClient = mockk<WebClient>()
private val fooHandler = FooHandler(barClient)
private val fooRouter = FooRouter()
private val fooClient = WebTestClient.bindToRouterFunction(
fooRouter.fooRoute(
// mocks
. . .
fooHandler
)
).build()
@Nested
inner class FindSomething {
@Test
fun `returns OK`() = runBlocking {
val response = mockk<ClientResponse>()
val spec = mockk<WebClient.RequestHeadersUriSpec<*>>()
coEvery { response.awaitBody<SomeType>() } returns SomeType(...)
coEvery { spec.awaitExchange() } returns response
coEvery { barClient.get() } returns spec
fooClient
.get()
.uri(...)
.exchange()
.expectStatus().is2xxSuccessful
. . .
}
}
它永远冻结了......嗯,我想这是因为它周围的一些协程魔法,但是因为我在这方面还是新手,我不明白这里到底发生了什么。有什么帮助吗?
Welp,我根据这个答案编写了自己的交换函数,解决了这个问题。下面是我如何做到这一点的示例:
kotlin prettyprint-override">. . .
fun setUpBarClient(exchangeFunction: ExchangeFunction) {
barClient = barClient.mutate()
.exchangeFunction(exchangeFunction)
.build()
// recreate fooHandler & fooClient
}
@Nested
inner class FindSomething {
@Test
fun `returns OK`() {
// this one from org.springframework.web.reactive.function.client.ExchangeFunction
val exchangeFunction = ExchangeFunction {
Mono.just(
ClientResponse.create(HttpStatus.OK)
.header(...)
.body(...)
.build()
)
}
setUpBarClient(exchangeFunction)
fooClient
.get()
.uri(...)
.exchange()
.expectStatus().is2xxSuccessful
. . .
}
}
问题内容: 运行PHPUnit测试时,我希望能够转储输出,以便可以调试一两个东西。 我已经尝试了以下内容(类似于PHPUnit Manual示例 ); 结果如下: 请注意,没有预期的输出。 截至2011年9月19日,我使用的是git版本的HEAD版本。 输出: 我做错了什么吗,还是潜在的PHPUnit错误? 问题答案: 更新 刚刚意识到实现此目的的另一种方法比命令行选项要好得多: 这样,您可以随时
问题内容: 我正在尝试为程序中用来验证表单的简单bean编写单元测试。Bean带有注释,并具有使用初始化的类变量 我想为此类中的验证方法编写单元测试,但是,如果可能的话,我希望在不利用属性文件的情况下这样做。我这样做的原因是,如果我从属性文件中提取的值发生更改,我希望这不会影响我的测试用例。我的测试用例正在测试验证值的代码,而不是值本身。 有没有一种方法可以在测试类中使用Java代码来初始化Jav
我试图为一个简单的bean编写单元测试,这个bean在我的程序中用来验证表单。bean使用进行注释,并具有一个使用 我想为这个类中的验证方法编写单元测试,但是,如果可能的话,我希望在不使用属性文件的情况下这样做。我的理由是,如果我从属性文件中提取的值发生了变化,我希望这不会影响我的测试用例。我的测试用例测试的是验证值的代码,而不是值本身。 有没有一种方法可以在我的测试类中使用Java代码来初始化一
问题内容: 我为我的一个脚本创建了一个小GUI。一切都很好。 当我单击一个按钮时,它会启动一个很大的功能,该功能正在解析某些网站中的许多数据。 但是,一旦我单击了Button,程序就会冻结,直到该功能完全运行为止。一切正常,但是为什么我的GUI在执行功能时冻结了。我想打印一个进度条,但这是不可能的。 这是程序的一部分: 在执行Module_1.main()时,我无法执行任何操作//打印任何内容…
对于我系统中的一个单例类,我很难在类测试期间将析构函数报告为“覆盖”(代码覆盖分析部分)。我认为这是因为测试框架在我的静态单例实例之前就被破坏了,因此我试图通过稍后创建单例实例来改变破坏顺序——而不是在程序启动时。 我的公共getInstance方法现在看起来像这样: 构造函数像往常一样是私有的,但我没有经典的单例静态实例指针作为类成员。相反,我将实例存储为静态函数内部数据(如上所示),该数据是在
问题内容: 这是我的java类: 这是单元测试: 测试失败,因为没有任何人注入。我应该如何正确处理这种情况?是否存在最佳实践? 问题答案: 如果没有像Spring这样的容器(或诸如基于Spring的Unitils之类的容器),则必须手动注入实体管理器。在这种情况下,您 可以 将以下内容用作基类: