`

hamcrest自定义BaseMatcher

    博客分类:
  • java
 
阅读更多
import com.google.common.collect.Lists;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.RandomUtils;

import java.util.Arrays;
import java.util.List;

/**
 * Created by Administrator on 2015/3/29.
 */
public class RandomDigits {

    public static final int DigitLength = 4;

    public String generate() {
        List<String> numbers = Lists.newArrayList();
        int index = DigitLength;
        while (index > 0) {
            String number = String.valueOf(RandomUtils.nextInt(10));
            if (!numbers.contains(number)) {
                numbers.add(String.valueOf(number));
                index--;
            }
        }
        return StringUtils.join(numbers, "");
    }
}

 

import org.apache.commons.lang.StringUtils;
import org.junit.Test;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;


/**
 * Created by Administrator on 2015/3/29.
 */
public class RandomDigitsTest {
    @Test
    public void should_return_four_digits_when_generate() throws Exception {

        RandomDigits randomDigits = new RandomDigits();

        assertThat(randomDigits.generate(), is(NumberMatcher.matcher()));
    }

    @Test
    public void should_return_four_different_digits_when_generate() throws Exception {

        RandomDigits randomDigits = new RandomDigits();

        assertThat(randomDigits.generate(), is(DifferentNumberMatch.matcher()));
    }
    @Test
    public void should_return_random_digits_when_generate() throws Exception {

        RandomDigits randomDigits = new RandomDigits();

        String firstRandomDigits = randomDigits.generate();
        String secondRandomDigits = randomDigits.generate();

        assertThat(StringUtils.equals(firstRandomDigits,secondRandomDigits), is(false));
    }
}

 

import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;

import java.util.regex.Pattern;

/**
 * Created by Administrator on 2015/3/29.
 */
public class NumberMatcher extends BaseMatcher<String> {

    public String number;

    public static Matcher<String> matcher()
    {
        return new NumberMatcher();
    }
    @Override
    public boolean matches(Object number) {
        this.number = (String) number;
        Pattern pattern = Pattern.compile("^\\d{4}$");
        return pattern.matcher(this.number).find();
    }

    @Override
    public void describeTo(Description description) {
        description.appendText(number + " not match '^\\d{4}$'");
    }
}

 

import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;

/**
 * Created by Administrator on 2015/3/29.
 */
public class DifferentNumberMatch extends BaseMatcher<String> {

    private String number;

    public static BaseMatcher<String> matcher()
    {
        return new DifferentNumberMatch();
    }
    @Override
    public boolean matches(Object o) {

        number = (String) o.toString();

        return Sets.newHashSet(Lists.charactersOf(number)).size() == number.length();
    }

    @Override
    public void describeTo(Description description) {
        description.appendText(this.number + " has same digit.");
    }
}

 

分享到:
评论

相关推荐

    CustomHamcrestMatchers:自定义 Hamcrest 匹配器的集合

    自定义 Hamcrest 匹配器的集合 Android 的 TableLayout 匹配器包括: 查看具有指定视图的行下方的 N 行 视图是具有指定子索引的视图组的成员 与指定视图在同一行的视图 指定行和列交叉点处的视图 安卓版 ...

    hamcrest-core-1.3的压缩包,hamcrest-core-1.3.jar包 是一款hamcrest的核心包

    3. 自定义匹配器:除了预定义的匹配器外,开发者还可以自定义匹配器以满足特定需求。这可以通过实现`Matcher`接口或使用`CoreMatchers`提供的`matchesPredicate()`方法来完成。 4. 嵌套匹配:Hamcrest支持嵌套匹配...

    hamcrest-1.3.zip

    通过使用Hamcrest,我们可以创建自定义的匹配器,这些匹配器可以表达复杂的条件,使测试更具表达力。 Hamcrest的核心概念是Matcher。Matcher是一个接口,定义了两个方法:matches()用于检查输入是否符合预期,...

    hamcrest-library-1.3和hamcrest-core-1.3.rc2.zip

    此外,`hamcrest-library`还包含了`DescribedAs`,这个工具类允许你为匹配器添加自定义的描述,使得测试失败时的错误信息更加友好和易懂。 在实际项目中,当你在JUnit测试中引入这两个jar包后,你的测试代码将能够...

    hamcrest-core-1.3.ORC2.jar:hamcrest的核心包,使用hamcrest框架必须引入的包

    《hamcrest-core-1.3.ORC2.jar:hamcrest核心包详解》 hamcrest-core-1.3.ORC2.jar是Java编程中一个至关重要的组件,它属于hamcrest框架的核心部分。hamcrest是一个用于匹配对象和表达式,进行断言的库,尤其在单元...

    hamcrest1.3完整版

    这是Hamcrest 1.3的主库文件,包含了所有必要的类和资源,用于在项目中引入和使用Hamcrest框架。将这个JAR文件添加到项目的类路径中,就可以开始编写基于Hamcrest的测试代码了。 5. **在单元测试中的应用** - **...

    hamcrest-core-1.3.jar

    4. **自定义匹配器**:除了内置的匹配器,Hamcrest还鼓励开发者根据需求创建自定义的匹配器。通过扩展`org.hamcrest.Description`接口,可以提供失败时的描述信息,增强测试的可读性。 5. **与测试框架的集成**:...

    hamcrest-library.rar

    《Hamcrest库详解及其在Java测试中的应用》 Hamcrest是一个强大的匹配框架,它为Java开发者提供了一套灵活且易于使用的断言库。这个名为"hamcrest-library.rar"的压缩包,包含了hamcrest的核心库——hamcrest-...

    hamcrest-core-1.3.rc2.jar/hamcrest-library-1.3.rc2.jar

    《Hamcrest库在Java单元测试中的重要角色》 在Java编程世界中,单元测试是确保代码质量的关键环节。为了有效地进行单元测试,开发者通常需要依赖一些专门的测试框架和库,其中Hamcrest就是一个不可忽视的角色。本文...

    hamcrest的jar包

    例如,`@Test(expected = IllegalArgumentException.class)`可以检查方法是否抛出了预期的异常,而`@Rule`可以用来定义自定义的测试规则,如断言日志记录或资源清理。 总的来说,hamcrest库是Java单元测试领域的一...

    hamcrest-core-1.3-API文档-中文版.zip

    赠送jar包:hamcrest-core-1.3.jar; 赠送原API文档:hamcrest-core-1.3-javadoc.jar; 赠送源代码:hamcrest-core-1.3-sources.jar; 包含翻译后的API文档:hamcrest-core-1.3-javadoc-API文档-中文(简体)版.zip...

    hamcrest-core-1.3.rc2.jar

    使用Hamcrest进行单元测试时,开发者可以创建自定义的匹配器,也可以使用预定义的匹配器如`CoreMatchers.is()`、`Matchers.endsWith()`等来检查对象的属性、方法或返回值是否符合预期。例如,你可以在JUnit的测试...

    hamcrest两个jar包

    标题“hamcrest两个jar包”指的是Hamcrest库中的两个核心组件,即`core.jar`和`library.jar`。这两个JAR文件是Hamcrest框架的基础,它们提供了丰富的匹配器(Matcher)类和API,帮助开发者编写更清晰、更具表达力的...

    hamcrest-library-1.3.jar

    Hamcrest是一个强大的Java匹配框架,它为编写自定义断言提供了便利,使测试代码更加清晰和富有表达力。hamcrest-library-1.3.jar是Hamcrest库的一个版本,此版本专注于提供丰富的匹配器类,帮助开发者构建高度定制的...

    junit.jar + hamcrest-core.jar + hamcrest-library.jar

    Junit、hamcrest-core.jar和hamcrest-library.jar这三者是Java编程语言中进行单元测试的关键工具,尤其对于Java开发者来说,它们是不可或缺的。 首先,我们来详细了解一下Junit。Junit是一款开源的测试框架,它是...

    hamcrest-core-1.3.rc2.jar,hamcrest-library-1.3.jar、

    支持Junit测试,简单实用,只需要添加即可,hamcrest-library-1.3.jar包是hamcrest的核心包,这个jar包主要用于补充hamcrest core包中的断言,导入后就可以正常开发使用了,主要适用于eclipse中的JUnit4测试操作,...

    hamcrest-library-1.3-API文档-中文版.zip

    赠送jar包:hamcrest-library-1.3.jar; 赠送原API文档:hamcrest-library-1.3-javadoc.jar; 赠送源代码:hamcrest-library-1.3-sources.jar; 赠送Maven依赖信息文件:hamcrest-library-1.3.pom; 包含翻译后的API...

    junit+hamcrest集成jar包

    《Junit与Hamcrest集成测试框架详解》 在软件开发过程中,单元测试是不可或缺的一环,它能够确保代码的质量和可维护性。Junit作为Java领域最常用的单元测试框架,而Hamcrest则是一款强大的匹配器库,能为测试提供...

Global site tag (gtag.js) - Google Analytics