0

「独立した」動作テストの書き方が本当にわかりません。

EG ユーザーはアドレス帳にアドレスを追加できます。

だから私は住所録クラスを持っています。アドレスを追加するテストを作成します。しかし、「表示アドレス」メソッドを呼び出さずに、アドレスが正常に書き込まれたことを確認するにはどうすればよいでしょうか? 「表示アドレス」メソッドを呼び出すときは、表示メソッドが機能して機能していることに依存しています。それでも、それは 1 つのテストで 2 つの動作をテストしていませんか?

または、検証のためにデータベースを掘り下げると、それは「動作」を実装に結び付けるものではありませんか?

4

1 に答える 1

1

ある時点でアドレスをデータベースに保存しているように聞こえます。

a)アドレス帳は、追加されたアドレスを何らかの方法で公開する必要があります-「GetAddresses」メソッドまたは「AddedAddresses」パブリックプロパティを介して-他のオブジェクトによって取得および保存できるようにします(おそらく言った); また

b)アドレス帳クラスにある種の「保存」メソッドがあり、アドレスをDBに保存する操作を開始します。これは、アドレス帳クラス内で他のオブジェクトに依存していることを意味します。リポジトリまたはデータ アクセス クラスとして。

a) の場合は、そのメソッドまたはプロパティを呼び出して、アドレスが期待どおりに追加されていることを確認する必要があります。b) の場合、偽のデータ アクセス クラスをアドレス帳に提供し、その偽のパブリック プロパティを公開し、アドレス帳で "Save" メソッドを呼び出し、偽のパブリック "Addresses" プロパティで検証を行うことができます。次のようなデータアクセスクラス:

(言語について言及していないので、これは単なる擬似コードです)

class addressbook

    private _dataAccess
    private addresses

    constructor (dataaccess) _dataAccess = dataAccess

    public method AddAddress(address) addresses.add(address)

    public method save() _dataaccess.save(addresses)



class fakedataaccess

    public addresses

    public method save(addresses) addresses = addresses


{test}
public test AddingAddressesWorks

    fake = new fakedataaccess
    book = new addressbook(fake)

    // Do stuff to add addresses to addressbook

    book.save

    assert fake.addresses == the_addresses_i_added

うまくいけば、それは理にかなっています。モックでこれを実現することもできますが、それは私の疑似コード fu の範囲を超えており、コンセプトはとにかく同じです。

しかし、いずれにせよ、検証したいものを検証するために、何か他のものを呼び出す必要がある (したがって、別の構成をテストしていると主張する可能性がある) ことは正しいです。

個人的には、私だったら、アドレス帳にパブリックな「Addresses」プロパティを追加します。

于 2012-12-28T11:04:39.193 に答える