私はnunit、moqを使用しており、TDDを実行しようとしています。
いくつかのユーザーアカウントを返すクエリがあります。条件のコレクションを取得する別のクエリがあります。
各アカウントを調べて、各アカウントをコレクションと照合し、ユーザーアカウントがどのような条件に該当するか(ある場合)を確認します。
public void Test()
{
var accounts = GetAccounts();
var conditions = GetConditions();
foreach(var a in accounts)
{
var found = conditions.Where(x => x.condition1 >= a.condition1 && x.condition2 <= a.condition2).FirstOrDefault();
if(found)
{
// move on to next condition in flow chart
}
else
{
continue;
}
}
}
これをTDDでテストするにはどうすればよいですか。正しい条件が見つかったかどうかを確認したいですか?これを公的な方法にするのが賢明だとは思いませんし、誰かが条件をチェックするという私のアプリケーションには何の意味もありません。
したがって、この条件が後で数値を計算するために使用されるため、実際に何をテストするかがわかりません。これは、適切な条件が呼び出されたかどうかを確認するために使用できます。それは基本的にメソッドの終わりを意味し、数は他の何かの影響を受けた可能性があり、TDDを理解する方法を打ち負かすでしょう(メソッドを一度に1つずつ記述しますが、最初に単体テストを行います)試して)
編集
はい、それが私が始めたことです。モックと偽物を作りました。すべてをセットアップしましたが、結果を検証するために使用するものに固執しました。私が作成している方法は、おそらく無効のままになります(エラーをログに記録するか、ある時点で顧客アカウントを更新します)。アプリケーションはスケジュールされたタスク(コンソールアプリ)として実行されるため、これは実際にはアプリケーション内の唯一のパブリックメソッドであり、基本的には「実行」メソッドです。すべてのビジネスケースを含むビジネスレイヤーに多くのプライベートメソッドがあります。最終的に、ユーザーはスキップされるか、条件を満たしている場合はペナルティが科せられます。ペナルティは彼らのアカウントに更新されます。
はい、条件メソッドをパブリックまたは内部にすることはできますが、ビジネスレイヤーの外部のメソッドがそれらについて知っている必要があるとは思いません。それはそのビジネスレイヤーにのみ関連しており、その「実行」メソッドが実行されたときにのみその上に配置されます。
これが、TDDを私にとって非常に難しいものにしている理由です。彼らは、私がユーザーと対話し、ユーザーに何らかのフィードバック(つまり成功メッセージ/結果)を送信する可能性が最も高いWebサイトを作成している場合は、パブリックメソッドのみをテストすると言います。しかし、1つのパブリックメソッドを介して実行されるスケジュールされたタスクとして実行する必要があり、残りは単なるビジネスルールであるアプリケーションを入手した場合、それをテストする方法を理解するのは非常に困難です。
SUT内部とは何ですか?