hamcrest-library Matchers和hamcrest-core CoreMatchers之间的区别

时间:2012-06-07 13:35:41

标签: junit hamcrest

看起来hamcrest org.hamcrest.Matchers类与org.hamcrest.CoreMatchers非常相似(虽然看起来Matchers有更多)。为什么我会选择使用CoreMatchers(除了看起来这个类稍微小一些),为什么这两个类如此相似?

3 个答案:

答案 0 :(得分:46)

Hamcrest匹配器分为几个模块。 “核心”包括构建其他匹配器所需的最基本的匹配器和抽象类。 org.hamcrest.CoreMatchers包括这些匹配器的工厂方法。其他匹配器位于“库”模块中,按其匹配的对象类型分组,并且是可选的。 org.hamcrest.Matchers包括两组匹配器。

你应该使用哪个?我静静地从后者输入所有内容而没有任何麻烦。也许编译时间可能需要稍长一点,但这对我来说从来都不是问题。除了JUnit导入之外,我把它放在单元测试的顶部:

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;

这为测试方法提供了最佳的可读性。

答案 1 :(得分:11)

如果您经常使用Mockito(就像我一样),您可能会这样做:

import org.mockito.Mockito;

static import org.mockito.Mockito.*;

并且由于Mockito类扩展了Mockito的Matchers类,因此最终可能会出现Matchers类或其静态方法之间的冲突。拥有CoreMatchers允许我在与Mockito相同的类中使用JUnit派生的CoreMatchers,而无需在使用时对它们进行全面限定。

答案 2 :(得分:1)

如果您使用Android的JUnit测试(非连接测试),则import PyPDF2 import pytesseract from PIL import Image pdfFileObj = open(r'C:\Users\WCS\Desktop\Scan project\Scanned.pdf', 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFileObj) img = Image.open(pdfReader.getPage(0)).convert('L') imagetext = pytesseract.image_to_string(img) print(imagetext) pdfFileObj.close() 似乎在已经包含的 junit 模块中可用,而Traceback (most recent call last): File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\SO.py", line 8, in <module> img = Image.open(pdfReader.getPage(0)).convert('L') File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PIL\Image.py", line 2554, in open fp = io.BytesIO(fp.read()) AttributeError: 'PageObject' object has no attribute 'read' 则不可用

因此,为了节省开销并避免导入另一个库,请考虑使用满足以下条件的CoreMatcher版本的这些类:

Matchers

只能使用CoreMatchers