0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SwiftでTDD写経 第四章 意図を語るテスト

Last updated at Posted at 2023-03-12

注意:TDD勉強会会用の資料です。
殴り書きしてあとで清書していくので投稿段階では綺麗ではありません。

Dollarのtimesメソッドは、自身の金額とmultiplier引数を掛けた値を保持するDollarを返すべき。
ここまで書いていたテストからは、Dollarを返すことは伝わりにくいので最初のアサーションを修正して、Dollar同士を直接比較する。

この部分

playground.swift
   func TestMultiplication(){
        var five = Dollar(5)
        var Product:Dollar = five.times(2);
        assert(Product.amount == 10)
        Product = five.times(3);
        assert(Product.amount == 15)
    }

以下のようにamountを消し去りたい。

playground.swift
   func TestMultiplication(){
     var five = Dollar(5)
       assert(Dollar(10) == five.times(2))
       assert(Dollar(15) == five.times(3))
    }

全コード
swiftだとEquatableが必要。

playground.swift

var money = MoneyTest()

money.TestMultiplication()
money.TestEquality()
class MoneyTest{
    init(){}
    
    func TestMultiplication(){
       var five = Dollar(5)
       assert(Dollar(10) == five.times(2))
       assert(Dollar(15) == five.times(3))
    }

    func TestEquality(){
        assert(Dollar(5) == Dollar(5))
        assert(Dollar(6) == Dollar(6))
    }
}

class Dollar :Equatable {
  private var amount:Int

    init(_ amount:Int){
        self.amount = amount
    }
    
    func times(_ multiplire:Int)  -> Dollar{
        return Dollar(self.amount * multiplire)
    }
///なんか本書読んで似たような関数作ったけどと、そいやEquatableに準拠させるだけでオブジェクトの比較可能なんですよねーーーー
//
//    func equals(_ Object:Any) -> Bool{
//    var dollar:Self = Object as! Self
//        return dollar.amount == self.amount
//    }
    
    static func == (lhs: Dollar, rhs: Dollar) -> Bool {
       return lhs.amount == rhs.amount
    }
    
}




効果
amountをprivateにできた。

リスク
等価性比較が正確に実装されていることを検証できていない場合、掛け算が正しくできていることを検証できていないということになる。

リスクに対し
完壁を求めない。
コードとテスト両方の視点から捉えることによって欠陥を減らし、自信を持って前に進む。
欠陥を見逃してしまう時は「どんなテストが書かれるべきであったか」という教訓を形にして前に進む。

この章の振り返り
・作成したばかりの機能を使って、テストを改善した。
・そもそも正しく検証できていないテストが2つあったら、お手上げ。
・リスクを受け入れて先に進んだ。
・テストコードとプロダクトコードの間の結合度を下げた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?