5

これは非常に漠然とした (そして初歩的な) 質問ですが、.....C# でクラス ライブラリをテストするにはどうすればよいでしょうか? テストにはnUnitを使用しています。

私がやろうとしているのは、データベースの相互作用をテストすることです。入力はシリアル化された XML オブジェクトであり、それを逆シリアル化してコードに対してテストすると、XML オブジェクトが再シリアル化されて出力されます。

うまくいけば、これはいくつかの洞察を与えます。ライブラリのインスタンスを作成するテスト アプリを作成することを考えていました。私が取ることができる別の/より良い/より効率的なアプローチはありますか?

4

5 に答える 5

3

NUnit のデータ注釈 ( 、 など) を使用する別のプロジェクトを作成する必要がありTestFixtureますTest。次に、そのプロジェクトをビルドし、作成した DLL を Nunit にロードします。

テストに関しては、通常どおりに記述してください ( Arrange-Act-Assert がより一般的なパターンです) 。

このようなもの

[Test]
public void MethodName_CallDatabase_ObjectDeserialized()
{
    //Arrange
    var db = new db();
    //Act 
    var output = db.ExecuteCall();
    //Assert
    Assert.That(output, Is.EqualTo("123"));
}
于 2012-04-16T18:18:10.527 に答える
2

方法に関しては、通常、ソリューションは次のようになります。

 Solution (Your Application)
    + YourApplication.Library
    + YourApplication.WebApp
    + YourApplication.Tests

Tests プロジェクトは、ソリューションに追加できる特定のプロジェクトです。その中で、NUnit DLL を使用してマークアップして実行する単体テスト ファイルを作成できます。つまりTestFixture、それらのクラスをメソッドとしてマークし、それらのクラスの特定のメソッドをメソッドとしてマークし、ライブラリ呼び出しの結果を検証するためのサポート呼び出しを使用しTestてプロジェクトの一部を実行します。YourApplication.LibraryAssert

于 2012-04-16T18:20:33.583 に答える
2

あなたが本当に厳密であることに興味があるなら、これにはいくつかの部分があります.

  1. NUnit、MBUnit、または MSTest に慣れる
  2. ライブラリが他のライブラリ、フレームワーク、ツールとやり取りする場所を把握します。それらの他のものがどのように動作するか (およびそれらがどのように誤動作する必要があるか) についての仮定を成文化するいくつかのテスト ケースを作成します。Moq や Rhino.Mocks などのモック/スタブ ライブラリをインストールして、よく理解してください。これらは、コードが正しくない方法で外部コードと対話している場合に通知します。
  3. やる気がある場合は、SQLite のように、実際の単純なデータベースを同じまたは類似のスキーマに接続するテストをさらにいくつか作成します (これらは統合テストと単体テスト (IMO) の境界線にまたがっています)。これで、コードは、期待どおりに事前にプログラムしたモックと対話しなくなりましたが、完全なデータベースに到達することもありません。
  4. 統合テスト。それを実際の [本番ではない] データベースに接続します。
于 2012-04-16T18:20:53.180 に答える
1

これには、多くの既存の単体テスト フレームワークのいずれかを使用します。

nUnitxUnit、さらにはMSTest (Visual Studio の多くのエディションに付属しています)。

于 2012-04-16T18:15:12.800 に答える
0

新しいテスト プロジェクトを作成したくない場合は、既存のクラス ライブラリ プロジェクトに新しいクラスを追加し、それに Nunit アノテーション TestFixture を追加して、テストをメソッドとして同じ内部に配置します。次のように

namespace APIWorkOut
{
    [TestFixture]
    public class TestClass
    {
        [Test]
        public void getListOfUser()
        {
            API api = new API();
            var listOFUsers = api.getUsers();
            Console.Write(listOFUsers.Data.Count);
        }       
        
    }
}
于 2021-01-31T00:42:38.110 に答える