1

クラスがありListContainerます。クラスはリストのコンテナであり、3 つの操作を許可します。

  1. 追加
  2. 削除する
  3. getNotValid (無効な要素のリストを返します)。

リストはクラス内でプライベートであるため、実際に要素を追加することを確認できません。追加機能をテストするにはどうすればよいと思いますか?

私の意見では、getNotValid で確認する必要があります。

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
Container::Container() {
}


void Container::add(Element element) {
    pthread_mutex_lock(&mutex);
    list.push_back(element);
    pthread_mutex_unlock(&mutex);
}

void Container::remove(unsigned int elementId) {
    pthread_mutex_lock(&mutex);
    list<Element>::iterator it;
    for (it = list.begin(); it != list.end(); ++it) {
        if (element->id == elementId) { //TODO is it the real check
            list.erase(it);
        }
    }
    pthread_mutex_unlock(&mutex);
}

list<Element> Container::getNotValid() {
    list<Element> result;
    pthread_mutex_lock(&mutex);
    list<Element>::iterator it;
    for (it = list.begin(); it != list.end(); ++it) {
        if (element->isNotValid()) {
            result.push_back(*it);
        }
    }
    pthread_mutex_unlock(&mutex);
    return result;
}
4

4 に答える 4

1

クラスは通常、パブリック インターフェイスを介してテストされるか、(統合テストを使用して) 特定の操作がアプリケーションの状態に与える影響をテストすることによってテストされます。

プライベート リストが、API のユーザーが無効なアイテムを取得できるようにするだけの場合は、メソッドとメソッドを使用してリストをテストするだけでよいとadd言えremoveますgetNotValid

有効なアイテムが何らかの方法で使用されている場合 (たとえば、ファイル システムやデータベースへの書き込みなど)、統合テストを通じてクラスをテストし、アプリケーションの状態に対して目的の効果が実際に発生していることを確認する必要があります。

于 2012-07-24T12:55:44.573 に答える
1

テストできないクラスを書くのは簡単です。あなたの場合、クラスにはテストするためのパブリック API がありません。つまり、3 つのメソッドを呼び出すことができるかどうか、例外がスローされないかどうかを確認する以外に、本格的なテストを作成することはできません。

一方、クラスをテスト可能にするためだけにメソッドを追加するべきではありません。should notに注意してください- それは not must notです。テストを真剣に考えるなら、API をシンプルに保つことよりも、十分な有用なテストを用意することが重要です。

あなたの場合、size()メソッドを追加することは理にかなっています-要素を追加/削除すると、リストのサイズが変わるはずです。

またはメソッドを追加しtoString()ます。これは、デバッグ時やテストの作成時に役立ちます。

ListContainer c = new ListContainer();
c.add("x");
assertEquals("[x]", c.toString());
于 2012-07-24T12:53:14.473 に答える
0

プライベートなものをテストする必要はありません。そのリストに追加したり、リストから削除したりすることには、測定可能な効果がなければなりません。を含むクラスをテストすると、が適切に機能しているListContainerかどうかがわかります。ListContainer

コメントしやすいように、コードを追加できますか?

于 2012-07-24T12:51:44.030 に答える
0

操作はクライアントにどのようaddに表示されListContainerますか? 私はあなたのクラスを使用すると仮定し、アイテムを追加します..そして何ですか?この状態でどうやって使うの?行動の変化を観察できますか? 状態変化?追加されたアイテムのプロパティは変更されますか? いくつかの変更を観察できるはずです。これは、テスト時に注目すべき点です。観察可能な変化

privateまたは、単体テストのリストを公開することもできます (テスト クラス/アセンブリに関する可視性を変更することにより)。

于 2012-07-24T12:52:25.767 に答える