MVC で単体テストを実行しようとしていますが、一部の機能では UserID が必要です (つまり、外部キーとしてデータベースに保存します)。
UserID は、ユニット テスト時に UserID を「偽造」して、偽のユーザーでユニット テストを実行できるようにする方法のUserData
属性に格納されます。FormsAuthenticationTicket
これは可能ですか?
Microsoft の組み込みの単体テスト システムを使用しています。
私が使用する予定のテストコードは、
[TestMethod]
public void EnsureAddItemAddsItems()
{
// Arrange
ShoppingCartController controller = new ShoppingCartController();
// These would be populated by dummy values
Guid itemID = Guid.Empty;
Guid itemTypeID = Guid.Empty;
// Act
ViewResult result = controller.AddItem(itemTypeID, itemID);
//Assert
Assert.AreEqual("Your shopping cart contains 1 item(s)",result.ViewBag.Message);
}
サンプルコードは次のようになります:-
public ActionResult AddItem(Guid itemType, Guid itemID, string returnAction)
{
ShoppingCartViewModel oModel = new ShoppingCartViewModel();
string szName = String.Empty;
int price = 0;
using (var context = new entityModel())
{
// This is the section I'm worries about
>>>>>>>>> Guid gUserID = this.GetCurrentUserID(); <<<<<<<<<
var currentSession = this.CreateOrContinueCurrentCartSession(gUserID);
var oItem = new ShoppingCartItem();
oItem.Id = Guid.NewGuid();
oItem.ItemId = itemID;
oItem.ItemTypeId = itemType;
oItem.ItemName = szName;
oItem.ShoppingCartSessionId = currentSession.ID;
oItem.Price = 1;
context.ShoppingCartItems.AddObject(oItem);
context.SaveChanges();
}
this.FlashInfo("Item added to shopping cart");
ViewBag.Message(string.Format("Your shopping cart contains {0} item(s)",AnotherFunctionThatJustCountsTheValues()));
return this.View();
}
強調表示された行は、userID を取得する場所です。その関数は、複雑なことを何も行わない単なる拡張関数であり、FormsAuthenticationTicket.UserData
フィールドとして保存されている UserID をフェッチするだけです。