TL;DR您应该探索不同的工具,并且不要回避可能看起来不像传统“单元测试”的“困难案例”。困难的案例通常是可测试的。
测试绝对是一个兔子洞。从表面上看,它看起来很漂亮和干净,但是当你进入它时,兔子洞会很深,这是一个例子:你如何测试这些东西?您希望确信您的代码正在做正确的事情,但您也不希望创建过于复杂和难以管理的测试,也不希望测试过于细粒度。
但是,对于您的具体问题,我确实有一些您可能希望了解的想法。
为了测试文件是否生成,您可以检查该文件最初是否不存在(ruby has File.exists?
),然后您可以通过某种方法检查它是否存在。当然,您会遇到诸如“内容正确吗?”、“完成完成了吗?”之类的问题,您也可以通过打开文件并检查来测试这些内容。
对于图像,您可能可以找到允许您检查图像属性的工具(也许是回形针?从未使用过它,但它是一个众所周知的宝石)。所以你可以做这样的事情(在某种伪代码中,因为我不知道有什么工具可以做到这一点):
it "resizes the image" do
img = Image.open_image("pic.png")
img[:size].should eq [100, 100]
img.close
resize_image
image = Image.open_image("pic.png")
imge[:size].should eq [25, 25]
img.close
end
测试通常依赖于找到越来越有用的宝石/工具来处理情况。是的,“单元”测试只会检查单元级代码,它们可能非常简单,但并非总是如此。但是随后您开始查看库规范、请求规范、路由规范、验收测试、控制器规范等。那里有很多工具,研究是关键。
但同样,您列出的示例可能不是您认为的单元测试。如果您的调整大小或文件生成是在模型之外完成的,那么是的,它是一个单元测试,但您不再编写那么简单的代码(如访问器和修改器)。很多时候,刚接触彻底测试的人不会认为一切都是可测试的,而且可能不是,但如果你四处玩耍和探索,你通常可以找到一种方法来做到这一点。