2

私は単体テストに慣れていないので、見つけた情報のほとんどは単体テストの側面にあるようです。私はこれをよく理解しており、MoqでMS Test Frameworkを使用することを計画しているので、単体テストの依存関係のためにモックを手作業でロールする必要はありません。

次の単体テスト方法があるとしましょう。

[TestMethod]
public void GetCustomerByIDUnitTest()
{
   //Uses Moq for dependency for getting customer to make sure 
   //ID I set up is same one returned to test in Assertion
}

代わりに実際のEntityFrameworkとDatabase呼び出しを使用して統合テストを行う、別の同一のテストを作成する必要がありますか?

[TestMethod]
public void GetCustomerByIDIntegrationTest()
{
   //Uses actual repository interface for EF and DB to do integration testing
}

この質問の目的のために、TDDまたはBDDに関するトピックを除外してください。私は、物理的に(2)個別のテストが必要かどうか、およびこれらのテストを編成する方法を簡単に判断しようとしています。これは、ユニットテストと統合テストの両方を行う場合の要件ですか?

ありがとう!

4

3 に答える 3

3

私の意見では、それはやや状況的です。私が小さな個人的なプロジェクトに取り組んでいる場合、いいえ、私は単体テストを行うだけです。

それが企業/企業プロジェクトである場合、私はユニットテストと統合テストの両方を行う傾向があります。ただし、ユニットテストと統合テストは分離してください。開発者は、単体テストを頻繁かつ迅速に実行できる必要があります。統合テストは通常​​、実行に長い時間がかかるため、実行頻度を減らすことができます。通常、私はコミットの前に統合テストを1回実行するだけですが、単体テストははるかに頻繁に実行します。


追記として、テスト名に何が起こるべきかを説明させてください。テスト名GetCustomerByIDUnitTestは実際にはあまりわかりません。より良いのは次のようなものです:GetCustomerByID_ReturnsTheCorrectUser_WhenAValidIdIsPassedそして逆にGetCustomerByID_ReturnsNull_WhenNonExistantIdIsPassed

私は命名規則を好む傾向がありWhat_Does_Whenますが、それも個人的な好みです。一般的に、説明が多いほど良いです。

于 2013-01-30T20:13:14.327 に答える
1

うーん、私はあなたがむしろ言及していないことを言及することによってあなたを失敗させないことを願っています。しかし、ここで私の2セント。前もって1つの免責事項。私はと一緒に使用nunitするRhinoMocksので、構文が異なる可能性がありますが、概念は同じです。

はい、個別のテストが必要です。テストを同じテストクラスに保存し、それらにタグを付けて、[Category("integrationtest")]統合テストを実行せずに単体テストを簡単に実行できるようにするかどうかを議論できます。その逆も可能です。あなたのTDDプラクティス(おっと、私がそれについて話したくないことは知っています:))では、ユニットテストをできるだけ早く完了する必要があります。

これを少し違う角度から見ると、テストを実際に複製しているわけではありません。統合テストは機能を検証し、単体テストはメソッドを分離して検証します。したがって、それらは完全に異なる名前を持つことができます。それらがあなたにとって意味がある限り(またはあなたがチームで何かを開発する場合:あなたのチームにとって意味がある限り)。

最も重要なことは、自分に合った方法を見つけることだと思います。本当に正しいことも悪いこともありません。単体テストと統合テストの両方を作成していることは大きなプラスだと思います。それらをどのように整理するかはあなた次第です。参加したプロジェクトごとに異なるアプローチがありました。

プロジェクトA:

  • 統合テスト用の1つのテストクラス
  • 単体テスト用の1つのテストクラス

これは、テストクラスに意味のある名前を作成するのに役立ち、テストしている実際の機能をキャプチャできます。単体テストに関しては、テストクラスは私たちがテストしているクラスと同じ名前でした。

プロジェクトB:

  • 1つのテストクラスで統合テストと単体テストを混同しました。

これも問題なく機能しましたが、統合テストを見つけるのに苦労することもありました。しかし、tbh、あなたの側にresharperがあると、それはどれほど難しいかもしれません:)。

于 2013-01-30T20:25:39.570 に答える
0

私が知っているように、UnitTestingとIntegrationTesting用に別々のプロジェクトが必要です。このの提案は、2つのプロジェクトを作成し、それらに「ProjectName.UnitTestsと」のような名前を付けることProjectName.IntegrationTestsです。開発者は、それぞれを個別に簡単に実行する必要があります。

テストに関する多くの興味深いトピックやビデオをここで見つけることができます

于 2013-01-30T20:14:45.340 に答える