TestNG 中使用 Guice 来进行依赖注入

Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。

Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入。

Guice采用Java加注解的方式进行托管对象的配置,充分利用IDE编译器的类型安全检查功能和自动重构功能,使得配置的更改也是类型安全的。

Guice提供模块对应的抽象module,使得架构和设计的模块概念产物与代码中的module类一一对应,更加便利的组织和梳理模块依赖关系,利于整体应用内部的依赖关系维护,而其他IOC框架是没有对应物的。

此外,借助privateModule的功能,可以实现模块接口的明确导出和实现封装,使得支持多数据源这类需求实现起来异常简单。

定义一个 Guice Module

这个 Guice Model 会实现 Module 接口。

然后对需要注入的类进行绑定。

绑定的语句在这里:

            binder.bind(TestConfigStorage.class).toInstance(config);
            binder.bind(WeChatOfficialAccountService.class).toInstance(weChatOfficialAccountService);
            binder.bind(WeChatMsgService.class).toInstance(weChatMsgService);

测试中使用

因为我们需要在测试中使用,所以我们会使用 testNG 的 Guice 注解。

使用下面的语句直接注入到模块中。

然后把需要的服务,注入进来就可以了。

   @Inject
    protected WeChatOfficialAccountService wxService;

是不是非常简单。

相对 Junit 测试框架来说,TestNG 使用 Guice 更加方便。

如何在 Junit 中使用 Guice ,请参考文章:Junit 5 如何使用 Guice DI 中的内容。

TestNG 中使用 Guice 来进行依赖注入 - 测试发布 - OSSEZGuice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。 Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入。 Guice采用Java加注解的方式进行托管对象的配置,充分利用IDE编译器的类型安全检查功能和自动重构功能,使得配置的更改也是类型安全的。 Guice提供模块对应的抽象module…https://www.ossez.com/t/testng-guice/14396

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Acai 是 JUnit4 和 Guice 的测试库,可以更容易的编写应用功能测试。主要特性:注入测试需要的助手类启动测试需要的任意的服务 运行测试之间的服务清理按照正确顺序启动多个服务 创建测试作用域绑定Acai 主要针对的是应用大型功能测试。安装<dependency>   <groupId>com.google.acai</groupId>   <artifactId>acai</artifactId>   <version>0.1</version>   <scope>test</scope> </dependency>使用 Acai 进行测试注入@RunWith(JUnit4.class) public class SimpleTest {   @Rule public Acai acai = new Acai(MyTestModule.class);   @Inject private MyClass foo;   @Test   public void checkSomethingWorks() {     // Use the injected value of foo here   }   private static class MyTestModule extends AbstractModule {     @Override protected void configure() {       bind(MyClass.class).to(MyClassImpl.class);     }   } }使用 Acai 启动服务@RunWith(JUnit4.class) public class ExampleFunctionalTest {   @Rule public Acai acai = new Acai(MyTestModule.class);   @Inject private MyServerClient serverClient;   @Test   public void checkSomethingWorks() {     // Call the running server and test some behaviour here.     // Any state will be cleared by MyFakeDatabaseWiper after each     // test case.   }   private static class MyTestModule extends AbstractModule {     @Override protected void configure() {       // Normal Guice modules which configure your       // server with in-memory versions of backends.       install(MyServerModule());       install(MyFakeDatabaseModule());       install(new TestingServiceModule() {         @Override protected void configureTestingServices() {           bindTestingService(MyServerRunner.class);           bindTestingService(MyFakeDatabaseWiper.class);         }       });     }   }   private static class MyServerRunner implements TestingService {     @Inject private MyServer myServer;     @BeforeSuite void startServer() {       myServer.start().awaitStarted();     }   }   private static class MyFakeDatabaseWiper implements TestingService {     @Inject private MyFakeDatabse myFakeDatabase;     @AfterTest void wipeDatabase() {       myFakeDatabase.wipe();     }   } } 标签:Acai
TestNG支持测试用例的依赖关系,即一个测试方法依赖于另外一个测试方法的执行结果。如果一个测试方法依赖于另外一个测试方法,那么在运行测试套件时,TestNG会先运行被依赖的测试方法,如果该方法执行成功,再运行依赖该方法的测试方法。这样能够确保测试方法的执行顺序和依赖关系。 TestNG提供了两种方式来实现测试用例的依赖: 1. 通过dependsOnMethods属性实现依赖关系 在@Test注解使用dependsOnMethods属性来指定被依赖的测试方法。例如: ``` @Test public void loginTest() { //登录测试逻辑 } @Test(dependsOnMethods = {"loginTest"}) public void searchTest() { //搜索测试逻辑 } ``` 在上面的例子,searchTest方法依赖于loginTest方法,因此在运行测试套件时,TestNG会先运行loginTest方法,如果该方法执行成功,再运行searchTest方法。 2. 通过dependsOnGroups属性实现依赖关系 在@Test注解使用dependsOnGroups属性来指定被依赖的测试组。例如: ``` @Test(groups = {"login"}) public void loginTest() { //登录测试逻辑 } @Test(groups = {"search"}, dependsOnGroups = {"login"}) public void searchTest() { //搜索测试逻辑 } ``` 在上面的例子,searchTest方法依赖于一个名为“login”的测试组,而loginTest方法属于该测试组。因此在运行测试套件时,TestNG会先运行loginTest方法,如果该方法执行成功,再运行searchTest方法。 使用dependsOnMethods或dependsOnGroups属性可以方便地实现测试用例的依赖关系,但是需要注意依赖关系的正确性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HoneyMoose

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值