@MicronautTest 和 EmbeddedServer 有什么区别
What is difference between @MicronautTest and EmbeddedServer
使用 MicronautTest
和 EmbeddedServer
启动服务器与在 Micronaut
框架的 Unit/Integration 测试中使用它们有什么区别。
选项A:
@MicronautTest
public class Test{
@Inject
EmbeddedServer server;
}
选项 B:
EmbeddedServer embeddedServer = ApplicationContext.run(EmbeddedServer.class);
选项 A 和 B 的区别在于您使用的 Micronaut 版本。
选项 B 用于 Micronaut 1.0 的早期阶段,当时 module micronaut-test
尚不可用。所以选项 B 是在没有 micronaut-test
支持的情况下编写集成测试。
EmbeddedServer embeddedServer = ApplicationContext.run(EmbeddedServer.class);
一段时间后(在 Micronaut 1.0.1 和 1.0.4 之间)OCI 引入了选项 A 模块 micronaut-test
使测试生活变得更加容易。它允许您编写 Spring 类似启动测试
@MicronautTest
public class Test extends Specification {
@Inject
EmbeddedServer server
}
我建议只使用选项 A,因为它是首选的测试方式,它使您可以使用 @Inject
任何 Micronaut bean,而无需直接使用 Micronaut 应用程序上下文。当使用 Spock 框架编写测试时,它还允许您动态地用 mocks 替换 Micronaut bean,如下例所示:
@MicronautTest
class MathMockServiceSpec extends Specification {
@Inject
MathService mathService
@Unroll
void "should compute #num to #square"() {
when:
def result = mathService.compute(num)
then:
1 * mathService.compute(num) >> Math.pow(num, 2)
result == square
where:
num | square
2 | 4
3 | 9
}
@MockBean(MathServiceImpl)
MathService mathService() {
Mock(MathService)
}
}
运行 ApplicationContext.run(EmbeddedServer.class)
将启动服务器(在测试或其他情况下)。 @MicronautTest
可以应用于测试,其结果是服务器将启动,除此之外,测试将受到依赖注入。一般来说,我会建议 @MicronautTest
.
@MicronautTest
提供注入依赖项的方法,例如(在 kotlin 中)
class MyTest(
@Client("/") client:HttpClient
@Inject val dataSource:DataSource){
// some tests
}
建议使用 MicronautTest
而不是手动创建它们
使用 MicronautTest
和 EmbeddedServer
启动服务器与在 Micronaut
框架的 Unit/Integration 测试中使用它们有什么区别。
选项A:
@MicronautTest
public class Test{
@Inject
EmbeddedServer server;
}
选项 B:
EmbeddedServer embeddedServer = ApplicationContext.run(EmbeddedServer.class);
选项 A 和 B 的区别在于您使用的 Micronaut 版本。
选项 B 用于 Micronaut 1.0 的早期阶段,当时 module micronaut-test
尚不可用。所以选项 B 是在没有 micronaut-test
支持的情况下编写集成测试。
EmbeddedServer embeddedServer = ApplicationContext.run(EmbeddedServer.class);
一段时间后(在 Micronaut 1.0.1 和 1.0.4 之间)OCI 引入了选项 A 模块 micronaut-test
使测试生活变得更加容易。它允许您编写 Spring 类似启动测试
@MicronautTest
public class Test extends Specification {
@Inject
EmbeddedServer server
}
我建议只使用选项 A,因为它是首选的测试方式,它使您可以使用 @Inject
任何 Micronaut bean,而无需直接使用 Micronaut 应用程序上下文。当使用 Spock 框架编写测试时,它还允许您动态地用 mocks 替换 Micronaut bean,如下例所示:
@MicronautTest
class MathMockServiceSpec extends Specification {
@Inject
MathService mathService
@Unroll
void "should compute #num to #square"() {
when:
def result = mathService.compute(num)
then:
1 * mathService.compute(num) >> Math.pow(num, 2)
result == square
where:
num | square
2 | 4
3 | 9
}
@MockBean(MathServiceImpl)
MathService mathService() {
Mock(MathService)
}
}
运行 ApplicationContext.run(EmbeddedServer.class)
将启动服务器(在测试或其他情况下)。 @MicronautTest
可以应用于测试,其结果是服务器将启动,除此之外,测试将受到依赖注入。一般来说,我会建议 @MicronautTest
.
@MicronautTest
提供注入依赖项的方法,例如(在 kotlin 中)
class MyTest(
@Client("/") client:HttpClient
@Inject val dataSource:DataSource){
// some tests
}
建议使用 MicronautTest
而不是手动创建它们