角度单元测试:这段代码值得单元测试吗?



我刚刚开始用角度进行单元测试。我很难弄清楚应用程序中的单元测试应该涵盖哪些内容。我应该测试下面的代码吗?

如果我这样做,我基本上将传递一个有效的值mode并检查this.propertiesSource是否发出了各种defaultProperties属性的正确值。是不是就像一遍又一遍地编写相同的代码?这只是一个例子,应用程序充满了这样的实例。

如果我不测试这些东西,那么我的代码覆盖率可能会忽略不计。

下面是组件中的代码示例:

mode: string;
defaultProperties = {
editable: this.editable,
showToolbar: this.showToolbar,
viewMode: this.viewMode,
editMode: this.editMode,
showPopup: this.showPopup,
formSavedClicked: this.formSavedClicked,
cancelClicked: this.cancelClicked,
refresh: this.refresh,
};
private propertiesSource = new BehaviorSubject(this.defaultProperties);

测试方法:

setGridMode(mode) {
this.mode = mode;
if (mode === "edit") {
this.propertiesSource.next({
editable: true,
showToolbar: true,
viewMode: false,
editMode: true,
showPopup: false,
formSavedClicked: this.formSavedClicked,
cancelClicked: this.cancelClicked,
refresh: false,
});
} else if (mode == "save") {
this.propertiesSource.next({
editable: false,
showToolbar: false,
viewMode: true,
editMode: false,
showPopup: false,
formSavedClicked: this.formSavedClicked,
cancelClicked: this.cancelClicked,
refresh: true,
})
// more code..multiple if else block like above
}  
}

虽然这可能看起来有些乏味,但最好对一切可能的内容进行单元测试。

出于以下几个原因,我会对此进行单元测试:

  1. 您可以测试边缘情况。例如,如果模式为 null 或是您未计划的值,该怎么办。你需要能够处理这个问题。
  2. 对于未来的开发人员。 如果有人出现并意外更改了其中一个值,您的测试将失败,您将知道出了问题。 如果他们更改值,这将需要更改测试。因此,验证更改实际上应该发生。

如果可以测试,则应进行测试。

正如Shashank Vivek所指出的,似乎有很多冗余。 也许可以分解出一些常见的功能。

除此之外,代码当然应该进行测试,但不一定必须通过单元测试来完成。 集成测试或 UI 测试可能是更适合的方法:对于单元测试,正如您正确观察到的那样,您的测试可能只是复制代码。 但是,从某种意义上说,它们可能不会很有价值,因为它们不会帮助您找到错误。

我假设这些设置旨在配置某些小部件库或类似内容的行为。 当然,您可以编写一个测试来检查mode"编辑"refresh的值是否false。 此测试基于您的假设,即此设置将导致相应小部件的特定行为。 但是,即使你的假设是错误的,单元测试仍然会通过,因为它只是反映了你自己的错误理解。

因此,要查看这些设置是否正确,您必须在代码与小部件库集成的情况下执行测试,以查看设置实际上是否会导致预期的效果 - 但这不再是单元测试。

最新更新