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写経 第11章 不要になったら消す

Last updated at Posted at 2023-03-19

2つのサブクラスDollarとFrancにはもうコンストラクタしか残っていない。
コンストラクタだけのサブクラスを残しておく理由はないので、サブクラスを消してしまいたい。

サブクラスのあらゆる参照を消し去ることが目的。
まずは親クラスのFrancを返していたメソッドから変更し、同様にDollarもMoneyにする。

変更前

playground.swift

    static func dollar(_ amount:Int) -> Dollar{
        return Dollar(amount,"USD")
    }


    static func franc(_ amount:Int) -> Franc{
        return Franc(amount,"CHF")
    }
  

変更後

playground.swift
    static func dollar(_ amount:Int) -> Dollar{
        return Money(amount,"USD")
    }


    static func franc(_ amount:Int) -> Franc{
        return Money(amount,"CHF")
    }

次にクラスの等価性のテストに関しては他のテストで十分テストされているので、もう消せるのではないか?

playground.swift
   func testEquality(){
        assert(Money.dollar(5) == Money.dollar(5))
        assert(Money.dollar(6) == Money.dollar(6))
        assert(Money.franc(5) == Money.franc(5))
        assert(Money.franc(6) == Money.franc(6))
        assert(Money.franc(6) != Money.franc(3))
        assert(Money.franc(6) == Money.dollar(6))
    }

うん、、、いらないね、、、過剰テストなので消す。

playground.swift
   func testEquality(){
        assert(Money.dollar(5) == Money.dollar(5))
        assert(Money.dollar(6) == Money.dollar(6))
        assert(Money.franc(6) == Money.dollar(6))
    }

前章で書いたテスト、testDifferentClassEquaユユtyは複数のクラスがある状況でしか意味をなさない。
ましてやサブクラス消すのでこのテストは消すぞ。

次にtestFrancMultiplicationはFrancに依存してる。こいつも消すぞ。
あらゆるものをけした結果以下のようになるぞ。(雑

playground.swift
var moneytest = MoneyTest()

moneytest.testMultiplication()
moneytest.testEquality()
moneytest.testCurrency()

class MoneyTest{
    init(){}
    
    func testMultiplication(){
        var five:Money = Money.dollar(5)
        assert(Money.dollar(10) == five.times(2))
        assert(Money.dollar(15) == five.times(3))
    }
    
    func testEquality(){
        assert(Money.dollar(5) == Money.dollar(5))
        assert(Money.dollar(6) == Money.dollar(6))
        assert(Money.franc(6) != Money.dollar(6))
    }
    
    func testCurrency(){
        assert("USD" == Money.dollar(1).currency())
        assert("CHF" == Money.franc(1).currency())
    }

}

///親クラス
class Money :Equatable{
    var _amount:Int
    var _currency:String
    init(_ amount:Int,_ currency:String){
        self._amount = amount
        self._currency = currency
    }
    
    static func == (lhs: Money, rhs: Money) -> Bool {
        print(lhs.currency())
        print(rhs.currency())
        return lhs._amount == rhs._amount &&
        lhs.currency() == rhs.currency()
    }
    
    func currency() -> String{
        return _currency
    }
    
    func toString() -> String{
        return _amount.description + " " + _currency
    }
    
    func times(_ multiplire:Int)  -> Money{
        return Money(_amount * multiplire, _currency)
    }
    
    static func dollar(_ amount:Int) -> Money{
        return Money(amount,"USD")
    }
    
    static func franc(_ amount:Int) -> Money{
        return Money(amount,"CHF")
    }
}



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?