1

I'm having a hard time learning how to implement appropriate testing with rspec and rails.

Speaking generally, how does one test the "hard cases" such as did a file get generated or was an image properly resized? Currently, to me it seems that unit testing is designed for testing the transformation of values rather than making sure data is processed and output appropriately.

4

1 回答 1

2

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

测试通常依赖于找到越来越有用的宝石/工具来处理情况。是的,“单元”测试只会检查单元级代码,它们可能非常简单,但并非总是如此。但是随后您开始查看库规范、请求规范、路由规范、验收测试、控制器规范等。那里有很多工具,研究是关键。

但同样,您列出的示例可能不是您认为的单元测试。如果您的调整大小或文件生成是在模型之外完成的,那么是的,它是一个单元测试,但您不再编写那么简单的代码(如访问器和修改器)。很多时候,刚接触彻底测试的人不会认为一切都是可测试的,而且可能不是,但如果你四处玩耍和探索,你通常可以找到一种方法来做到这一点。

于 2012-05-17T20:34:26.273 回答