看起来hamcrest org.hamcrest.Matchers
类与org.hamcrest.CoreMatchers
非常相似(虽然看起来Matchers
有更多)。为什么我会选择使用CoreMatchers
(除了看起来这个类稍微小一些),为什么这两个类如此相似?
答案 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
只能使用CoreMatcher
s。