我正在使用EF Core 中的單元測驗檔案所建議的存盤庫模式。在我的代碼中,由于對來自 EF Core 而不是 DB 背景關系的模型進行操作,我無法正確地完全測驗方法。
我的意思的一個例子如下:
要測驗的代碼:
private static void AddToUserScore(Members member)
{
var basePoints = 2;
if (member.HintAsked)
{
basePoints--;
member.HintAsked = false;
}
if (member.LocationHintAsked)
{
basePoints--;
member.LocationHintAsked = false;
}
member.UserScore = basePoints;
}
EF Core 背景關系模型本身:
public class Members
{
public int MemberId { get; set; }
public int AppId { get; set; }
public string Username { get; set; }
public int UserScore { get; set; }
public string QuestionIds { get; set; }
public int CurrentQuestionNumber { get; set; }
public int LocationId { get; set; }
public bool HintAsked { get; set; }
public bool LocationHintAsked { get; set; }
}
單元測驗樣本:
var fakeMemberMock = Fixture.Create<Mock<Members>>();
fakeMemberMock.SetupSet(members => members.HintAsked = false);
fakeMemberMock.VerifyGet(members => members.HintAsked, Times.Exactly(1));
由于我的模型的所有屬性都不是虛擬的,因此這將導致運行時出錯。
我想知道是否有任何理由不應該為此目的將我的 EF Core 模型全部虛擬化。
I am not to sure of any sideffects this may have with interaction with my database or any pros and cons of doing this. I know virtual is generally placed on navigational properties but i do not know wether doing this on normal properties is a good idea or not.
Feel free to mention another method of going about what I am attempting that would be simpler.
Thanks in advance.
uj5u.com熱心網友回復:
讓我問一下,測驗方法的內部是不是太細化了?另一種方法是測驗方法而不是模型類。該方法執行一個可測驗的作業單元。
// test case 1
var model1 = new Members();
model1.UserScore = 10;
model1.HintAsked = true;
// run the method AddToUserScore on model
// do the asserts
Assert.Equal(..., model1.UserScore);
// test case 2
var model1 = new Members();
model1.UserScore = 10;
model1.LocationHintAsked = true;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/446712.html
標籤:c# asp.net entity-framework unit-testing moq
上一篇:System.Data.Entity.Core.EntityException:“底層提供程式在打開時失敗。”錯誤?
