iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
1
Software Development

模組化設計系列 第 4

Day04 - 模組化原則:可替換性

  • 分享至 

  • xImage
  •  

在前面其實我們已經有提到,可替換性是模組很重要的特徵之一,我們延續上一篇的例子來觀察作者的設計思維,下面這段程式碼是一個最樸實的報表格式,當測試案例通過時,就印出一個.,如果測試失敗則印出一個F,原始碼非常的簡短很適合拿來說明。

下面的這段程式 DotReporter 繼承了 WDIOReporter,所以 DotReporter 繼承了 WDIOReporter 所有功能,並且可以 override 掉 WDIOReporter 裡原先的實作邏輯。

import chalk from "chalk";
import WDIOReporter from "@wdio/reporter";

// Initialize a new `Dot` matrix test reporter.
export default class DotReporter extends WDIOReporter {
  constructor(options) {
    // make dot reporter to write to output stream by default
    options = Object.assign({ stdout: true }, options);
    super(options);
  }

  // pending tests
  onTestSkip() {
    this.write(chalk.cyanBright("."));
  }

  // passing tests
  onTestPass() {
    this.write(chalk.greenBright("."));
  }

  // failing tests
  onTestFail() {
    this.write(chalk.redBright("F"));
  }
}
// https://github.com/webdriverio/webdriverio/blob/master/packages/wdio-dot-reporter/src/index.js

除此之外 WDIOReporter 裡還保留了許多定義好的 interface,待讓使用者可以自行實作。

onRunnerStart () {}
onBeforeCommand () {}
onAfterCommand () {}
onScreenshot () {}
onSuiteStart () {}
onHookStart () {}
onHookEnd () {}
onTestStart () {}
onTestPass () {}
onTestFail () {}
onTestSkip () {}
onTestEnd () {}
onSuiteEnd () {}
onRunnerEnd () {}

// https://github.com/webdriverio/webdriverio/blob/master/packages/wdio-reporter/src/index.js

因為作者預先定義的這些 interface,讓這些目的性相同的模組,可以依照使用者情境替換使用。


上一篇
Day03 - 模組化原則:單一職責原則 (SRP)
下一篇
Day05 - 模組化原則 - API 優先的設計導向
系列文
模組化設計30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言