繁体   English   中英

角度单元测试:此代码值得进行单元测试吗?

[英]Angular Unit Testing: Is this code worth unit testing?

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

如果我愿意,我基本上将传递一个有效的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. 您可以测试边缘情况。 例如,如果mode为null或不是您计划的值,该怎么办。 您需要能够处理该问题。
  2. 对于未来的开发人员。 如果有人出现并意外更改其中一个值,则测试将失败,并且您会知道出了点问题。 如果他们更改值,则将需要更改测试。 因此,验证更改实际上应该发生。

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

正如Shashank Vivek所指出的那样,似乎存在很多冗余。 也许可以排除一些常用功能。

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

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

要查看这些设置是否正确,因此,您将必须在将代码与窗口小部件库集成的地方执行测试,以查看设置是否确实达到了预期的效果-但这不再是单元测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM