`

Java单元测试

 
阅读更多
package com.alipay.morderprod.biz.order.air.impl;

import static org.junit.Assert.assertTrue;

import java.lang.reflect.Field;

import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JMock;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import com.alipay.acctrans.core.module.enums.AccountTypeEnum;
import com.alipay.airmng.common.service.facade.account.enums.AirAccountTypeEnum;
import com.alipay.airmng.common.service.facade.account.result.AirAccountServiceResult;
import com.alipay.morderprod.biz.order.product.SpecialProductManager;
import com.alipay.morderprod.biz.shared.enums.SpecialProductEnum;
import com.alipay.morderprod.common.service.integration.air.AirClient;

@RunWith(JMock.class)
public class AirManagerImplTest {

    private Mockery          context               = new JUnit4Mockery() {
                                                       {
                                                           setImposteriser(ClassImposteriser.INSTANCE);
                                                       }
                                                   };

    protected AirManagerImpl airManagerImpl        = new AirManagerImpl();

    //dependence class
    AirClient                airClient             = context.mock(AirClient.class);
    SpecialProductManager    specialProductManager = context.mock(SpecialProductManager.class);

    @Before
    public void setUp() throws Exception {

        airManagerImpl.setAirClient(airClient);
        airManagerImpl.setSpecialProductManager(specialProductManager);
        autoInject(airManagerImpl, specialProductManager, "specialProductManager");
    }

    /**
     * 通过注解的方式注入对象.
     * 
     * @param dest 
     * @param obj 需要注入的接口对象.
     * @param name 需要注入的接口对象的名称.
     */
    private void autoInject(Object dest, Object obj, String name) {
        try {
            Field f = dest.getClass().getDeclaredField(name);
            f.setAccessible(true);//设置他能够访问private的对象.
            f.set(dest, obj); //注入obj接口对象到dest对象中
        } catch (Exception e) {
            throw new RuntimeException("cannot set field by name:" + name, e);
        }
    }

    @After
    public void tearDown() throws Throwable {
        context.assertIsSatisfied();
    }

    @Test
    public void test_checkMainAccount() throws Throwable {

        context.checking(new Expectations() {
            {
                SpecialProductEnum first = SpecialProductEnum.AIR_PERSONAL;

                allowing(specialProductManager).getSpecialProduct(with(any(String.class)));
                will(returnValue(first));
            }
        });

        context.checking(new Expectations() {
            {
                AirAccountServiceResult first = new AirAccountServiceResult();
                first.setSuccess(true);
                allowing(airClient).checkMainAccount(with(any(String.class)),
                    with(any(AirAccountTypeEnum.class)));
                will(returnValue(first));
            }
        });

        String productId = "23123213123";
        String mainCardNo = "23213213123";
        AccountTypeEnum usertype = AccountTypeEnum.PRIVATE_ACCOUNT;

        boolean result = airManagerImpl.checkMainAccount(productId, mainCardNo, usertype);

        assertTrue(result);
    }

    @Test
    public void test_checkMainAccount_1() throws Throwable {

        context.checking(new Expectations() {
            {
                SpecialProductEnum first = SpecialProductEnum.AIR_PRO;

                allowing(specialProductManager).getSpecialProduct(with(any(String.class)));
                will(returnValue(first));
            }
        });

        context.checking(new Expectations() {
            {
                AirAccountServiceResult first = new AirAccountServiceResult();
                first.setSuccess(true);
                allowing(airClient).checkMainAccount(with(any(String.class)),
                    with(any(AirAccountTypeEnum.class)));
                will(returnValue(first));
            }
        });

        String productId = "23123213123";
        String mainCardNo = "23213213123";
        AccountTypeEnum usertype = AccountTypeEnum.CORPORATE_ACCOUNT;

        boolean result = airManagerImpl.checkMainAccount(productId, mainCardNo, usertype);

        assertTrue(result);
    }

    @Test
    public void test_checkMainAccount_2() throws Throwable {

        context.checking(new Expectations() {
            {
                SpecialProductEnum first = SpecialProductEnum.AIR_PERSONAL;

                allowing(specialProductManager).getSpecialProduct(with(any(String.class)));
                will(returnValue(first));
            }
        });

        context.checking(new Expectations() {
            {
                AirAccountServiceResult first = new AirAccountServiceResult();
                first.setSuccess(false);
                allowing(airClient).checkMainAccount(with(any(String.class)),
                    with(any(AirAccountTypeEnum.class)));
                will(returnValue(first));
            }
        });

        try {
            String productId = "23123213123";
            String mainCardNo = "23213213123";
            AccountTypeEnum usertype = AccountTypeEnum.PRIVATE_ACCOUNT;

            boolean result = airManagerImpl.checkMainAccount(productId, mainCardNo, usertype);

            assertTrue(result);
        } catch (Exception e) {

        }
    }

    @Test
    public void test_checkMainAccount_3() throws Throwable {

        context.checking(new Expectations() {
            {
                SpecialProductEnum first = SpecialProductEnum.AIR_PRO;

                allowing(specialProductManager).getSpecialProduct(with(any(String.class)));
                will(returnValue(first));
            }
        });

        context.checking(new Expectations() {
            {
                AirAccountServiceResult first = new AirAccountServiceResult();
                first.setSuccess(false);
                allowing(airClient).checkMainAccount(with(any(String.class)),
                    with(any(AirAccountTypeEnum.class)));
                will(returnValue(first));
            }
        });
        try {
            String productId = "23123213123";
            String mainCardNo = "23213213123";
            AccountTypeEnum usertype = AccountTypeEnum.PRIVATE_ACCOUNT;

            boolean result = airManagerImpl.checkMainAccount(productId, mainCardNo, usertype);

            assertTrue(result);
        } catch (Exception e) {

        }
    }

    @Test
    public void test_checkMainAccount_4() throws Throwable {

        context.checking(new Expectations() {
            {

                allowing(specialProductManager).getSpecialProduct(with(any(String.class)));
                will(throwException(new Exception()));
            }
        });

        context.checking(new Expectations() {
            {
                AirAccountServiceResult first = new AirAccountServiceResult();
                first.setSuccess(true);
                allowing(airClient).checkMainAccount(with(any(String.class)),
                    with(any(AirAccountTypeEnum.class)));
                will(returnValue(first));
            }
        });

        try {
            String productId = "";
            String mainCardNo = "";
            AccountTypeEnum usertype = AccountTypeEnum.PRIVATE_ACCOUNT;

            boolean result = airManagerImpl.checkMainAccount(productId, mainCardNo, usertype);

            assertTrue(result);
        } catch (Exception e) {

        }
    }

}

分享到:
评论

相关推荐

    java单元测试.rar

    Java单元测试是软件开发过程中的重要环节,它主要用于验证代码的独立模块是否按照预期工作。在Java编程中,我们通常使用JUnit框架来进行单元测试。JUnit是开源的、基于Java的测试框架,它允许开发者编写可重复运行的...

    Java单元测试Java单元测试Java单元测试Java单元测试

    Java单元测试是软件开发过程中的重要环节,它主要用于验证代码的独立模块是否按照预期工作。在Java编程中,单元测试确保了每一小部分代码(如方法或类)都能单独、正确地执行,从而提高整体软件质量,降低维护成本。...

    系统单元测试规范-4:JAVA单元测试指引参照.pdf

    系统单元测试规范-4:JAVA单元测试指引参照.pdf 本文档旨在提供一个系统的单元测试规范,旨在提高系统的代码健壮性和测试覆盖率。该规范涵盖了JAVA单元测试的指引,覆盖了测试的需求、测试颗粒化、测试自动化、持续...

    java 单元测试

    综上所述,Java单元测试涉及到许多方面,从选择合适的测试框架,到编写有效的测试用例,再到集成到持续集成流程中,都是保证软件质量的关键步骤。熟练掌握这些知识点,将有助于开发出更加健壮、可维护的Java应用程序...

    java单元测试demo

    Java单元测试是软件开发过程中的重要环节,它主要用于验证代码的独立模块是否按照预期工作。在这个"java单元测试demo"中,我们关注的是如何通过测试来确保接口的正确性,以便在调试过程中清晰地查看输入参数和返回值...

    junit4 jar包 Java单元测试框架绿色免费版.zip

    这个“junit4 jar包 Java单元测试框架绿色免费版.zip”文件包含的是JUnit4框架的可执行jar包,用于在Java项目中进行单元测试。 JUnit4的引入极大地简化了单元测试的编写过程,它引入了注解(Annotation)的概念,...

    Java单元测试(基础)

    本教程将深入探讨Java单元测试的基础,特别是结合JUnit框架的使用。 首先,我们需要理解什么是单元测试。单元测试是对软件中的最小可测试单元进行检查和验证的过程。对于Java来说,这通常是单个方法。通过编写测试...

    使用Java单元测试实现一个简单的登录验证系统.txt

    ### 使用Java单元测试实现一个简单的登录验证系统 #### 背景介绍 单元测试是软件开发过程中不可或缺的一部分,它能够帮助开发者确保代码的质量并及时发现潜在的问题。在本篇文章中,我们将详细介绍如何使用Java编写...

    java单元测试包

    Java单元测试包主要包含了JUnit 4的不同版本,如4.7、4.8和4.11。JUnit是一个用于编写和运行Java单元测试的开源框架,它是Java开发中不可或缺的一部分,尤其是在实施持续集成和敏捷开发时。这个压缩包提供的是JUnit ...

    JAVA单元测试JUnit

    ### JAVA单元测试JUnit的核心知识点详解 #### 一、JUnit概览与重要性 JUnit作为一款卓越的Java单元测试框架,自问世以来便以其强大的功能和易用性深受开发者喜爱。由软件大师Erich Gamma和Kent Beck共同打造,...

    JUnit—Java单元测试必备工具

    总之,JUnit作为Java单元测试的重要工具,它的易用性和灵活性使其成为开发者不可或缺的测试框架。通过深入理解和熟练运用JUnit,可以有效地提高软件的可靠性,减少维护成本,同时提升开发团队的生产力。学习和掌握...

    Java单元测试之代码覆盖率-JaCoCo

    在Java开发过程中,单元测试是确保代码质量的重要环节。它帮助开发者发现并修复问题,提高软件的稳定性和可维护性。而代码覆盖率则是衡量单元测试有效性的一个关键指标,它表示了被测试代码被执行的程度。JaCoCo是一...

    java单元测试篇:使用clover为java代码的junit测试做覆盖率分析.pdf

    Java 单元测试篇:使用 Clover 为 Java 代码的 JUnit 测试做覆盖率分析 Java 单元测试是软件测试的重要组成部分,对于 Java 开发者来说,单元测试是必不可少的。今天,我们将学习使用 Clover 框架来分析 Java 代码...

    Java单元测试之JUnit篇

    Java单元测试之JUnit篇 Java单元测试是编写测试代码,应该准确、快速地保证程序基本模块的正确性。好的单元测试的标准是JUnit,它是Java单元测试框架,已经在Eclipse中默认安装。 JUnit4是JUnit的最新版本,通过...

    Java单元测试之JUnit

    Java单元测试是软件开发过程中的重要一环,它主要用于验证代码的各个独立模块是否按预期工作。JUnit作为Java领域中最常用的单元测试框架,为开发者提供了简单、高效的测试工具。在这个"Java单元测试之JUnit"的代码...

    Java单元测试实战高清PDF中文版最新版本

    Java单元测试实战来自于作者多年来的单元测试实践,最初发表在阿里内网的ATA上,成为了很多阿里同学单元测试学习的必读文章。很多程序员认为单元测试会花费大量的时间,因此他们写单元测试的意愿比较低,导致了单元...

    基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip

    基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的...

    Java单元测试JUnit4.7

    Java单元测试是软件开发过程中的重要环节,它用于验证代码的独立模块是否按预期工作。JUnit是Java领域最广泛使用的单元测试框架,它为开发者提供了一种简洁、高效的测试工具。JUnit 4.7是该框架的一个版本,包含了对...

    用于java单元测试的资源包 junit-4.11.jar hamcrest-core-1.3.jar

    用于java单元测试的资源包 junit-4.11.jar hamcrest-core-1.3.jar

Global site tag (gtag.js) - Google Analytics