このテストでは、顧客を作成し、Details()コントローラメソッドを呼び出してViewModelオブジェクトを返すことができるかどうかを確認します。ユニットテストコントローラメソッド - Initialize()を使用しないでベースクラスプロパティに値を代入
[TestMethod()]
public void Can_View_AccountDetails()
{
AccountController target = new AccountController(null, null, null, null);
target.customer = new Customer { Id = 4, Active = true, BillingAddress_Id=1, ShippingAddress_Id=2 };
// Act
ActionResult result = target.Details();
// Assert
var resultData = ((ViewResult)result).ViewData.Model as AccountViewModel;
Assert.IsInstanceOfType(resultData, (typeof(AccountViewModel)));
}
'customer'はコントローラの基本クラスのメンバで、Initialize()で割り当てられます。最初は何も割り当てられませんでしたが、 'protected'ではなく 'public'に設定することで、テストで使用でき、基本クラスのInitialize()メソッドを呼び出そうとしませんでした。
EDIT: 'customer'は、基本クラスコンストラクタに挿入されたリポジトリオブジェクトからデータを取り込みます。
これは正しい方法ですか?テストを機能させるためにアクセシビリティレベルを変更するのはどういう意味か間違っているようです。
また、私はテストを作成するためにMoqを使用しようとしていますが、私は実際にここですべての嘲笑をしていません。
AccountControllerまたはベースコントローラは、Customerインスタンス/顧客情報をどのように取得しますか? – BrokenGlass
@BrokenGlass - 更新後に – markpsmith
の編集を参照してください。顧客/リポジトリを基本クラスに挿入できますが、AccountControllerに挿入する方法はありますか?そのコードを表示できますか? – BrokenGlass