0

100回呼び出すことができるメソッドがあり、同じ結果が得られる場合、テストは簡単です。しかし、次のようなものがあるApiのようなものをどのようにテストしますか?

int CreateUser(username,password); //returns the id of the user, -1 if error
int SubmitOrder(username,password,productName,quantity);//returns the id of the order -1 if error
int CancelOrder(username,password,orderId); //returns -1 if error

このApiが機能することをどのようにテストしますか?テストデータをどのように作成しますか?ユーザーを2回作成できないため、単体テストを記述できません。同じテストデータを使用できません(UserNameは一意です)。注文を送信すると、応答として常に異なるorderIdが取得されます。

4

2 に答える 2

1

システムを既知の初期状態、つまりユーザーも注文もない状態に「リセット」する何らかの方法を見つける必要があります。

また、システムの状態を監視する方法を見つける必要があります。この方法は、実際には破壊的である可能性があります。つまり、システムの状態を変更したり、損傷したりする可能性があります。あなたの場合、メソッドは、そのような状況でCreateUser戻ることが知られているため、ユーザーが既に存在するかどうかを確認するためのオブザーバーとして使用できます。-1

テスト ケースの 1 つが次のようになります。

reset (); // Each test case should start with reset
assertNotEquals (-1, CreateUser ("foo", "bar")); // This should work fine
assertEquals (-1, CreateUser ("foo", "zoo")); // Make sure user "foo" does exist
assertNotEquals (-1, SubmitOrder ("foo", "bar", "apple", 1)); // Make sure user can pass authentication
assertEquals (-1, SubmitOrder ("foo", "zoo", "apple", 1)); // Make sure password is actually checked

上記のテスト ケースではCreateUser、指定された名前とパスワードでユーザーを実際に作成し、同じ名前で 2 人のユーザーを作成できないことを確認します。

別のテスト ケースを次に示します。

reset ();
CreateUser ("foo", "bar");
orderID = SubmitOrder ("foo", "bar", "apple", 1); // Submit order
assertNotEquals (-1, CancelOrder (orderID)); // Make sure order was really created
assertEquals (-1, CancelOrder (orderID)); // Make sure order was cancelled

等々。当然のことながら、データベースに直接クエリを実行するなど、システムの状態を観察するためのより簡単な方法を見つけたほうがよいでしょう。

于 2013-02-16T09:49:42.767 に答える
-1

OOP言語について話していると思います。ユニットテストと依存性注入によって問題を解決できると思います。核心概念:

  • まず、DataBase クラスのテストを行います
  • APIをテストするとき、FakeDataBaseクラスをそれに注入します(同じインターフェースを共有します)

したがって、テスト環境では、API は他の偽のデータベースに書き込むか、単純にクエリをファイルに出力し、このファイルの内容が期待どおりかどうかを確認するだけです。

素晴らしいビデオ:

http://www.youtube.com/watch?feature=player_embedded&v=wEhu57pih5w# !

http://en.wikipedia.org/wiki/Dependency_injection

http://en.wikipedia.org/wiki/Unit_testing

于 2013-02-16T09:57:25.823 に答える