验证单元测试实际上是在运行,而不是仅仅因为编写得不好而被跳过

时间:2016-07-01 15:09:58

标签: unit-testing

我们正在使用sinon和mocha来进行单元测试。我已经多次提出这个问题,我写了一些测试(可能是在一个promise,或一个回调,或一个存根),并且这些测试中的测试不会受到影响,因此它们实际上并没有测试任何东西。

我无法想象成为唯一一个这样做过的人,所以想知道人们做了什么来验证他们写的测试实际上是在运行。

举个例子:

// sStuff...

let myStub = sinon.stub(className, "classMethod", (result) => {
    // THIS will never be ran.
    expect(result).to.be.equal(5);
});

expect(myStub.callCount).to.be.equal(0);

// Stuff...

测试不会抱怨它没有运行,因为我们有callCount检查,但实际上,我们永远不会在className上调用某些东西来调用classMethod函数并测试结果。 / p>

任何常见的解决方案?我无法想到搜索条件。

谢谢!

1 个答案:

答案 0 :(得分:2)

我从未使用过sinon或mocha。也就是说,验证测试是否符合您预期要求的最简单方法是确保在条件不满足时失败。

在TDD中,您可以按照红色,绿色,重构周期来帮助您避免此问题,因为您总是会遇到测试失败然后被修复的问题。通过您实现的新代码。

如果我必须为现有代码编写测试,那么我通常会编写我认为需要的测试(可以通过),然后更改代码的行为以验证它是否会破坏测试&#39 ;。如果它没有打破测试,那么测试就没有任何好处,所以我回去修理测试。然后我将更改回滚到代码并验证测试再次通过。

验证测试是否可以失败需要花费的时间比写入它们要花费更长的时间,但是失败周期有助于确认测试确实值得并且按预期工作。