精华内容
参与话题
问答
  • hamcrest

    2019-01-05 21:17:19
    使用过Junit 的应该有过体验:在实际开发中,一些基本的断言,如eqaul,null,true它们的...JUnit4.4引入了Hamcrest框架,Hamcest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活。 Hamcre...

    使用过Junit 的应该有过体验:在实际开发中,一些基本的断言,如eqaul,null,true它们的可读性并不是很好。而且很多时候我们要比较对象、集合、Map等数据结构。这样我们要么进行大段的字段获取再断言。或者干脆自己编写表达式并断言其结果。
    JUnit4.4引入了Hamcrest框架,Hamcest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活。

    Hamcrest 提供了大量被称为“匹配器”的方法。其中每个匹配器都设计用于执行特定的比较操作。Hamcrest的可扩展性很好,让你能够创建自定义的匹配器。最重要的是,JUnit也包含了Hamcrest的核心,提供了对Hamcrest的原生支持,可以直接使用Hamcrest。

    类图

     

    类实现

    hamcrest架构中,主要实现匹配器(Matcher),因此Matcher作为顶层类型。

    Matcher

    public interface Matcher<T> extends SelfDescribing {

    //验证对象是否匹配。此处用Object,因为在运行时不知道是什么类型,由实现类决定
        boolean matches(Object item);

    //构造不匹配的缘由。
        void describeMismatch(Object item, Description mismatchDescription);
    }

    BaseMatcher

    BaseMatcher作为所有匹配器的基类,不建议直接实现Matcher接口

    public abstract class BaseMatcher<T> implements Matcher<T> {

        @Override
        public void describeMismatch(Object item, Description description) {
            description.appendText("was ").appendValue(item);
        }

        @Override
        public String toString() {
            return StringDescription.toString(this);
        }
    }

    具体匹配器

    匹配器
    名称 用途 说明
    CustomMatcher 仅用于作为匿名内部类的父类  
    DescribedAs<T> 为其他Matcher提供一个Description  
    AllOf<T> 判断多个Mathcer是否同时true。短路方式  
    IsInstanceOf 判断是否是指定class的实例  
    PropertyMatcher 判断属性值是否匹配  
    Is<T> 装饰一个其他Matcher  
    IsAnything<T> always return true  
    IsEmptyString 判断不为空字符串  
    IsEqual<T> 判断是否equal  
    IsIn<T> 是否是集合元素  
    IsNot<T> 装饰一个其他Matcher,判断Matcher不匹配  
    IsNull<T> 判断对象是否为null  
    IsSame<T> 判断对象是同一个  
    AnyOf<T> 判断多个Mathcer是否有一个true。短路方式  
    TypeSafeMatcher 类型安全匹配器。把一个类方便的转化为一个Matcher  
    TypeSafeDiagnosingMatcher 类型安全诊断匹配器。把一个类方便的转化为一个Matcher,并报告为什么不匹配。  

    类型安全匹配器

    名称 用途 说明
    BigDecimalCloseTo 是否近似某个值  
    HasProperty<T> 是否有属性  
    IsArray<T> 集合是否一一匹配一组Matcher  
    IsArrayContaining<T> 集合是否有一个元素匹配  
    IsCloseTo 是否近似某个值  
    IsCompatibleType<T> 一个类是否是另一个类的子类  
     IsEmptyCollection<E> 是否是一个空集合  
    IsEmptyIterable<E> 迭代是否是空的  
    IsEqualIgnoringCase 是否相同,忽略大小写  
    IsEqualIgnoringWhiteSpace 是否相同,忽略空白  
    IsMapContaining<K,V> Map是否有一个元素匹配  
    OrderingComparison<T extends Comparable<T>> 大小比较  
    StringContainsInOrder String集合是否都以...开头  
    SubstringMatcher 子串匹配  
    ThrowableMessageMatcher<T extends Throwable> 异常信息匹配  
         

    ReflectiveTypeFinder

    此类找到某个类包含某个方法的superclass,从下往上查找。

     

    类型安全诊断匹配器

    名称 用途 说明
    CombinableMatcher<T> 组合匹配器 and,or,
     Every<T> 每个元素都匹配  
    HasPropertyWithValue<T> 属性值匹配  
    HasXPath xml匹配  
    IsCollectionContaining<T> 有集合元素匹配  
    IsEventFrom 事件源是同一个对象  
    SamePropertyValuesAs<T>    
     IsIterableContainingInAnyOrder<T>    
    IsIterableContainingInOrder<E>    
    FeatureMatcher<T, U>    

    Dsecription

    描述不匹配情况的类。每个Matcher描述自己的匹配情况。

    NullDescription

    丢弃信息

    BaseDescription

    基础Description,存储为字符串

    StringDescription

    继承于BaseDescription。存储为String。

    Sample


    public class Person {
        String name;
        int age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
        public Person(String name)
        {
            this.name =name;
        }
    }

     


    public class HamcrestTest {

        public static void main(String[] args)
        {
            Person person = new Person("tom");
            
            //
            IsAnything<Person> anything =  new IsAnything<>();
            boolean matched = anything.matches(person);
            System.out.println("anything:" +  matched);
            
            IsEmptyString isEmptyString = new IsEmptyString();
            matched = isEmptyString.matches("555");
            System.out.println("isEmptyString:" +  matched);
            
            IsEqual<Person> isEqual = new IsEqual<Person>(person);
            matched = isEqual.matches(person);
            System.out.println("isEqual:" +  matched);
            
            IsNull<Person> isNull = new IsNull<>();
            matched = isNull.matches(person);
            System.out.println("isNull:" +  matched);
            
            IsSame<Person> isSame  = new IsSame<Person>(person);
            matched = isSame.matches(person);
            System.out.println("isEqual:" +  matched);
            
            Is<Person> is = new Is<>(isEqual);
            matched = is.matches(person);
            System.out.println("is:" +  matched);
            
            IsNot<Person> isNot = new IsNot<>(isEqual);
            matched = isNot.matches(person);
            System.out.println("isNot:" +  matched);
            
            
            IsInstanceOf isInstanceOf = new IsInstanceOf(person.getClass());
            matched = isInstanceOf.matches(person);
            System.out.println("isInstanceOf:" +  matched);
            
        
            List<Matcher<? super Person>> matchers = new ArrayList<>();
            matchers.add(is);
            matchers.add(isSame);
            AllOf<Person> allOf = new AllOf<Person>(matchers);
            matched = allOf.matches(person);
            System.out.println("allOf:" +  matched);
            
            
            AnyOf<Person> anyOf = new AnyOf<Person>(matchers);
            matched = anyOf.matches(person);
            System.out.println("anyOf:" +  matched);
            
            
            HasProperty<Person> hasProperty = new HasProperty<>("name");
            matched = hasProperty.matches(person);
            System.out.println("hasProperty:" +  matched);
            
            HasPropertyWithValue<Person> hasPropertyWithValue = new HasPropertyWithValue<Person>("name",new IsEqual<String>("tom"));
            
            matched = hasPropertyWithValue.matches(person);
            System.out.println("hasPropertyWithValue:" +  matched);
            
            
        }
    }

    结果:

    anything:true
    isEmptyString:false
    isEqual:true
    isNull:false
    isEqual:true
    is:true
    isNot:false
    isInstanceOf:true
    allOf:true
    anyOf:true
    hasProperty:true
    hasPropertyWithValue:true

    注意:与属性有关的Matcher,必须保证测试类是public的,方法是public的。

    展开全文
  • Hamcrest

    2017-09-14 15:10:30
    在以前的junit测试中常用到断言,但是没有研究断言的源代码,最近在项目中采用swtbot时候,发现项目swtbot和junit底层都使用了hamcrest作为匹配工具 的.SWTBot中finder中采用的是Hamcrest实现的.其中常用的如下: 1,...

    在以前的junit测试中常用到断言,但是没有研究断言的源代码,最近在项目中采用swtbot时候,发现项目swtbot和junit底层都使用了hamcrest作为匹配工具 的.

    SWTBot中finder中采用的是Hamcrest实现的.其中常用的如下:
    1,WithText可以matcher有getText方法的swt widget。
    2,WithLabel用来matcher特定的Label和CLabel widget。
    3,WithId用来matcher控件的属性和值对。
    4,WithMnemonic用来matcher有getText方法且会有助记符&的widget。
    5,WidgetOfType用来matcher控件的类名。
    6, WithToolTip可以matcher有getToolTipText方法的swt widget。
    7,WithItem可以matcher有getItems方法的swt widget。
    8,WithStyle可以matcher有特定样式的swt widget,如withStyle(SWT.PUSH,”SWT.PUSH”)。
    9,WithRegex扩展withText用来matcher文本正则表示的widget。
    10,InGroup可以在一个group内matcher swt widget。
    11,InUIThread在一个UIThread内matcher另一个matcher。
    12, AllOf用来定义matcher方法集来区配swt widget。

    Hamcrest是什么东西呢?
    Hamcrest是一个书写匹配器对象时允许直接定义匹配规则的框架.有大量的匹配器是侵入式的,例如UI验证或者数据过滤,但是匹配对象在书写灵活的测试是最常用.本教程将告诉你如何使用Hamcrest进行单元测试.
    Hamcrest从一开始就设计结合不同的单元测试框架.例如,Hamcrest可以使用JUnit3和4和TestNG.(详细查看完整Hamcrest发布中的例子).在一个现有的测试套件中迁移到使用Hamcrest风格的断言是很容易的,因为其他断言风格可以和Hamcrest的共存.
    通过使用从mock Objects框架概念匹配器到Hamcrest匹配器桥接适配器Hamcrest也可以在mock objects框架中.例如,JMock 1系统规定是Hamcrest风格.Hamcrest提供了一个JMock 1适配器来允许你在JMock 1测试中使用Hamcrest匹配器.JMock 2不需要这样一个适配器层,因为它被设计使用Hamcrest作为一个匹配库.Hamcrest还提供了EasyMock 2适配器.同样,详细查看Hamcrest例子.
    Hamcrest带有一个有用的匹配器库.以下是一些最重要的.
    核心
    anything - 总是匹配,如果你不关心测试下的对象是什么是有用的
    describedAs - 添加一个定制的失败表述装饰器
    is - 改进可读性装饰器 - 见下 “Sugar”
    逻辑
    allOf - 如果所有匹配器都匹配才匹配, short circuits (很难懂的一个词,意译是短路,感觉不对,就没有翻译)(像 Java &&)
    anyOf - 如果任何匹配器匹配就匹配, short circuits (像 Java ||)
    not - 如果包装的匹配器不匹配器时匹配,反之亦然
    对象
    equalTo - 测试对象相等使用Object.equals方法
    hasToString - 测试Object.toString方法
    instanceOf, isCompatibleType - 测试类型
    notNullValue, nullValue - 测试null
    sameInstance - 测试对象实例
    Beans
    hasProperty - 测试JavaBeans属性
    集合
    array - 测试一个数组元素test an array’s elements against an array of matchers
    hasEntry, hasKey, hasValue - 测试一个Map包含一个实体,键或者值
    hasItem, hasItems - 测试一个集合包含一个元素
    hasItemInArray - 测试一个数组包含一个元素
    数字
    closeTo - 测试浮点值接近给定的值
    greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - 测试次序
    文本
    equalToIgnoringCase - 测试字符串相等忽略大小写
    equalToIgnoringWhiteSpace - 测试字符串忽略空白
    containsString, endsWith, startsWith - 测试字符串匹配

    展开全文
  • m looking for the latest version of hamcrest. In the past I've always used hamcrest-core, etc. and the latest version is 1.3 from 2012. Now it seems there is java-hamcrest version 2.0 that's ...
  • hamcrest 我在Hamcrest库上做了几篇文章 ,我确实很喜欢使用它,但是我希望对其进行一些更改。 我了解他们所做的大多数设计决策,但我认为其中一些确实不值得。 介绍Litecrest 我对库所做的大多数更改都有助于...

    hamcrest

    我在Hamcrest库上做了几篇文章 ,我确实很喜欢使用它,但是我希望对其进行一些更改。 我了解他们所做的大多数设计决策,但我认为其中一些确实不值得。

    介绍Litecrest

    我对库所做的大多数更改都有助于减轻Hamcrest的负担,因为我觉得有些事情不必要地减轻了负担。 这就是为什么我将更改称为Litecrest。 它不会是一个实际的库; 这只是大声思考。 我也希望您能从中学到一些有关设计库的知识。

    没有说明

    Description接口以及StringDescriptionBaseDescription类实际上并不值得。 他们提供了列表转换为字符串好看一些不错的方法,但toString()在所有这些方法应该是足够的。 如果不是这样,可以将一些protected final方法放在BaseMatcher ,以方便地为列表构建字符串。 当然,这并没有真正遵循SRP密切,所以你可以使用类似 Description ,以提供方便的方法。

    说明,否则不是很有帮助。 它的存在性假设它专门用于提供从长远来看可能不是String的输出。 作为一个使用良好的库,将其从String更改为与输出无关的类型会破坏向后兼容,但这种更改不太可能需要。 应用YAGNIDescription类就在厕所下面。

    无输出参数

    所述describeTo()describeMismatch 不宜服用在Description或附加物体的任何其它类型的字符串,尤其是作为out参数(某物,以避免尽可能经常)。 既然这些方法没有开始的返回类型,那么绝对没有理由使用out参数。

    仔细研究问题,您将发现根本没有理由使用参数。 我了解到,他们可能一直在试图迫使匹配器的创建者不使用String串联,但事实并非如此。 如果匹配器的描述只是一个简单的小字符串,则没有理由他们不应该仅仅返回该字符串。 就个人而言,我将删除Description参数,并为它们提供String或CharSequence的返回类型。 我考虑使用CharSequence因为那样会给使用StringBuilder带来更大的动力,但是简单地返回String也不是什么大问题,因为他们可以在其上调用toString() 不过,我也可能会使用CharSequence ,因为我将在断言逻辑中使用StringBuilder来将输出放在一起,并且StringBuilder也可以接受CharSequence ,因此唯一的toString()必须在完成输出时被调用。

    类型安全

    Matcher接口采用通用参数,该参数与matches()方法一起使用,但是所述方法采用Object而不是通用类型。 javadoc声称这是由于类型擦除引起的,但我不认为这是一个问题。 我没有做任何挖掘来尝试是否可以将其切换为通用类型,但是如果我发现您实际上可以使用通用类型,则可以。 这消除了对TypeSafeMatcher的需要,因为它也检查null,因此可以用更简单的NullCheckingMatcher代替,或者仅实现它,以便断言在捕获到NullPointerException将不匹配描述更改为“为null”。 通过执行所有这些操作,我们可以消除所有其他双倍的基类,这些基类必须加倍以覆盖类型安全匹配器和不那么重要的匹配器。 (例如: CustomMatcherCustomTypeSafeMatcherDiagnosingMatcherTypeSafeDiagnosingMatcher ,以及我加倍的ChainableMatcher ,摆脱了两个DiagnosingMatcher的影响;它们的设计很差,两次调用matches()

    更改一些名字

    我真的不喜欢describeTo()这个名字。 应该是describeExpected()describeMatch() 我了解他们遵循JMock ConstraintsSelfDescribing的命名约定,但是看到他们没有费心完成其余方法签名的复制,实际上并没有任何SelfDescribing

    CustomMatcher S的关系被称为OneOffMatcher S或QuickMatcher秒。 Custom是一个令人误解的名称,听起来您需要对其进行扩展才能创建自己的匹配器。

    文档中的更多示例

    我不确定该库中有几类有用,因为它们的文档未显示其用法。 Condition就是其中之一。 从少量的文档看来,这似乎是相对有用的,但是由于它没有提供使用示例(并且它是一个具有内部接口和两个内部类的相对复杂的文件),我不知道如何使用它。 它还没有记录其公共方法,因此我不确定它们是否需要大量研究。

    FeatureMatcher已有不错的文档,但是同样,没有示例。

    那些为图书馆编写文档的人在任何时候都牢记这一点; 如果不是很明显(通常,即使不是很明显),则应给出使用中的类的示例。

    删除无关的类

    其中一些已经被直接或间接地解决了。 删除Description及其所有子类。 删除SelfDescribing ,因为它仅在Description仍然存在时才真正有用。 删除所有TypeSafe版本的基本匹配器。 卸下Diagnosing匹配器。 我不确定是否应该删除Condition因为我没有太大用。 如果保留Condition ,那么最终在核心org.hamcrest包中有五个原始的十一个类,在api org.hamcrest包中有四个原始的两个接口。

    现在,让我们深入研究org.hamcrest.internal包。 ArrayIterator没什么用,因为您只能使用可以与foreach循环一起使用的数组。 NullSafety似乎模仿Arrays.toList()功能,但是用IsNull匹配器替换了null匹配器。 我看不到这有什么帮助,因此将其删除。 ReflectiveTypeFinder可能最终会有用。 我只看到它在TypeSafeMatcherFeatureMatcher ,尽管我不确定在FeatureMatcher使用了多少。 不过,我会保留。 最后两个处理的是SelfDescribing ,我们已将其删除,因此这两个处理也是一样。 这仅使ReflectiveTypeFinder脱离了以前的五个类。

    我不打算讨论所有其他匹配器。 在大多数情况下,已添加它们的用途。 由于删除了这么多的基类,几乎所有的类都可能必须进行更改。

    Lambdas!

    如果将新的功能范例也应用到hamcrest,则可以扩展匹配器概念的实用性。 我没有想太多,但是对于一次性匹配器,您可以修改库以包括一个新的assertThat()方法,如下所示:

    public static  void assertThat(T item, String description, Predicate matcher) {
       if(!matcher.test(item)) {
          StringBuilder output = new StringBuilder();
          output.append("Expected: ")
                .append(description)
                .append("\n      but: was")
                .append(item.toString());
          throw new AssertionError(output.toString());
       }
    }

    这将使您可以编写类似于以下内容的断言:

    assertThat("cats", "doesn't contain \"dogs\"", str -> !str.contains("dogs"));

    实际上,实际上我已经在ez-testing迷你库中添加了LambdaAssert类,因此您可以将其与原始的hamcrest库一起使用。

    匹配器接口

    实际上有一个Matcher接口是毫无意义的,因为hamcrest希望您扩展BaseMatcher而不是实现Matcher 如果您非常不想让任何人实现,那么为什么要创建一个接口? 特别是因为BaseMatcher为我们所做的唯一事情就是为describeMismatch()创建一个默认实现describeMismatch()并“实现”放置在此处的不赞成使用的方法,告诉您使用BaseMatcher而不是Matcher )。

    如果您真的不希望人们使用该界面,请摆脱它。 就我个人而言,由于无论如何我总是会重写describeMismatch() ,因此我认为只实现接口就完全可以了,而不必让JVM加载实际上为我提供任何东西的基类。

    另外,由于我们现在有了Java 8,所以该接口可以只使用默认方法来实现默认实现。 我知道可以避免这种情况,因为较旧的Java版本将无法利用这一点。

    所以,要么只是BaseMatcher或没事的Matcher正在实施。

    奥托罗

    我还想更改其他一些小事情,例如,迫使人们重写describeMismatch()而不是提供默认值,但是我甚至不确定那个,因为默认值通常足够有效。 无论如何,即使您有一个受欢迎的图书馆,也并不意味着它是完美的。 始终注意进行重构。

    不幸的是,所有这些更改都不是向后兼容的,但有时是值得的。

    翻译自: https://www.javacodegeeks.com/2015/01/redesigning-hamcrest.html

    hamcrest

    展开全文
  • hamcrest断言

    2020-10-10 15:27:14
    hamcrest能够很好的支持复杂断言,下面举例说明。 GitHub地址:https://github.com/hamcrest/PyHamcrest 示例 from hamcrest import * def test_hamcrest(): the_string = 'Hello Hamcrest' my_string = '...

    python自带assert可实现简单断言,但遇到复杂断言assert就不能支持了。而hamcrest能够很好的支持复杂断言,下面举例说明。

    GitHub地址:https://github.com/hamcrest/PyHamcrest

    示例

    from hamcrest import *
    
    
    def test_hamcrest():
        the_string = 'Hello Hamcrest'
        my_string = 'Hello Hamcrest'
        assert_that(the_string, equal_to(my_string))
    

    匹配库

    Object

    关键字 说明
    equal_to match equal object
    has_length match len()
    has_property match value of property with given name
    has_properties match an object that has all of the given properties.
    has_string match str()
    instance_of match object type
    none, not_none match None, or not None
    same_instance match same object
    calling, raises wrap a method call and assert that it raises an exception

    Number

    关键字 说明
    close_to match number close to a given value
    greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to match numeric ordering

    Text

    关键字 说明
    contains_string match part of a string
    ends_with match the end of a string
    equal_to_ignoring_case match the complete string but ignore case
    equal_to_ignoring_whitespace match the complete string but ignore extra whitespace
    matches_regexp match a regular expression in a string
    starts_with match the beginning of a string
    string_contains_in_order match parts of a string, in relative order

    Logical

    关键字 说明
    all_of and together all matchers
    any_of or together all matchers
    anything match anything, useful in composite matchers when you don’t care about a particular value
    is_not, not_ negate the matcher

    Sequence

    关键字 说明
    contains exactly match the entire sequence
    contains_inanyorder match the entire sequence, but in any order
    has_item match if given item appears in the sequence
    has_items match if all given items appear in the sequence, in any order
    is_in match if item appears in the given sequence
    only_contains match if sequence’s items appear in given list
    empty match if the sequence is empty

    Dictionary

    关键字 说明
    has_entries match dictionary with list of key
    has_entry match dictionary containing a key
    has_key match dictionary with a key
    has_value match dictionary with a value

    Decorator

    关键字 说明
    calling wrap a callable in a deferred object, for subsequent matching on calling behaviour
    raises Ensure that a deferred callable raises as expected
    described_as give the matcher a custom failure description
    is_ decorator to improve readability
    展开全文
  • Isolate hamcrest

    2020-12-27 11:53:53
    <div><p>I started this after discussing <a href="https://github.com/eproxus/meck/pull/219#issuecomment-729689472">this</a> and ... as a means to isolate <code>hamcrest</code>....<p>I ended up: ...
  • Hamcrest Tutorial

    2019-09-29 21:58:11
    Java Hamcrest Home Hamcrest Tutorial Introduction Hamcrest is a framework for writing matcher objects allowing ‘match’ rules to be defined declaratively. There are a number of situations...
  • hamcrest test

    2019-12-27 18:07:50
    import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*; number test @Test public void mytest(){ int num = 50; /**数值匹配**/ //测试变量是否大于指定值 ...
  • upgraded hamcrest version

    2020-12-01 18:02:20
    </code>hamcrest when we use awaitility because it's hamcrest version is out of date. Please accept this pull request that updates hamcrest to the latest version.</p><p>该提问来源于开源项目:...
  • hamcrest的jar包 我在Hamcrest库上做了几篇文章,我确实很喜欢使用它,但是我希望对其进行一些更改。 我了解他们做出的大多数设计决策,但我认为其中一些确实不值得。 介绍Litecrest 我对库所做的大多数更改都有助...
  • <div><p>Bumps <a href="https://github.com/hamcrest/JavaHamcrest">hamcrest-core</a> from 2.1 to 2.2. Release notes <p><em>Sourced from <a href="https://github.com/hamcrest/JavaHamcrest/releases">...
  • <div><p>Bumps <a href="https://github.com/hamcrest/JavaHamcrest">hamcrest-core</a> from 1.3 to 2.2. Release notes <p><em>Sourced from <a href="https://github.com/hamcrest/JavaHamcrest/releases">...
  • Hamcrest 总结

    2019-09-29 22:11:18
    Junit JUnit框架用一组assert方法封装了一些常用的断言。这些assert方法可以帮我们简化单元测试的编写。...Hamcrest 使用过Junit 的应该有过体验:在实际开发中,一些基本的断言,如eqaul,null...
  • Fix Hamcrest dependency

    2021-01-07 09:05:52
    <div><p>The dependency hamcrest-core is deprecated. The right artifact name is just hamcrest. <p>This change is <a href="https://reviewable.io/reviews/spockframework/spock/1181"><img src=...
  • java.lang.NoSuchMethodError: org.hamcrest.core.AnyOf.anyOf([Lorg/hamcrest/Matcher;)Lorg/hamcrest/core/AnyOf; at org.hamcrest.text.IsEmptyString.<clinit>(IsEmptyString.java:18) at org.hamcrest....
  • Hamcrest学习指南

    2020-11-10 17:31:05
    Hamcrest 1、前言 Hamcrest 是一款用于校验的 Java 的单元测试框架,可以组合创建灵活的匹配器进行断言。 官网:http://hamcrest.org/JavaHamcrest/ 2、API 1、startsWith:匹配字符串以 XX 开头 assertThat...
  • s great that these hamcrest jars (at version 1.3, which is what junit 4.12 depends on) declare an automatic module name so that they can be used with the JPMS, but there's a problem --- they ...
  • 支持Junit测试,简单实用,只需要添加即可,hamcrest-library-1.3.jar包是hamcrest的核心包,这个jar包主要用于补充hamcrest core包中的断言,导入后就可以正常开发使用了,主要适用于eclipse中的JUnit4测试操作,...
  • Hamcrest指南

    2014-02-01 17:13:36
    Hamcrest是一个书写匹配器对象时允许直接定义匹配规则的框架.有大量的匹配器是侵入式的,例如UI验证或者数据过滤,但是匹配对象在书写灵活的测试是最常用.本教程将告诉你如何使用Hamcrest进行单元测试. 我的第一个...
  • hamcrest-parent-1.3.pom

    2021-01-10 15:06:18
    hamcrest-parent-1.3.pom
  • hamcrest-core-1.3.rc2.jar/hamcrest-library-1.3.rc2.jar 两个jar的打包 单元测试JUnit必须引用的jar包,否则会报错无法启动测试程序
  • hamcrest-core-1.3.jar

    千次下载 热门讨论 2013-05-23 09:54:25
    hamcrest-core-1.3.jar
  • Hamcrest 风格断言

    2019-08-13 07:08:10
    import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Lis...

空空如也

1 2 3 4 5 ... 20
收藏数 2,409
精华内容 963
关键字:

hamcrest