使用參數化構造函數嘲諷對象時,如果在構造函數中初始化的屬性是虛擬的,則Moq不會設置屬性值。但是,如果它是非虛擬財產,Moq設置價值。使用虛參數和參數構造函數的Moq行爲
以下是我的課我想嘲笑。
public class Activity
{
private Activity() {}
public Activity(string code, string description, string option)
{
if(string.IsNullOrEmpty(code)) throw new ArgumentNullException("code");
if (string.IsNullOrEmpty(option)) throw new ArgumentNullException("option");
Code = code;
Description = description;
Option = option;
}
public virtual string Code { get; private set; }
public virtual string Description { get; private set; }
public virtual string Option { get; private set; }
}
這是我嘗試嘲笑它:
[TestMethod]
public void It_Creates_Mock_For_A_Class()
{
var mock = new Mock<Activity>("Code 1", null, "Option");
Assert.IsNotNull(mock.Object);
Assert.AreEqual("Code 1", mock.Object.Code);
}
測試方法失敗說: Assert.AreEqual失敗。預期:。實際:<(null)>。
但是,如果我從所有屬性中刪除virtual關鍵字,它將起作用並通過測試用例。
由於實體框架的原因,我必須保持屬性的虛擬性。
任何線索?如何解決這個問題?
其實測試的測試MOQ框架,而不是測試你的構造函數的實現。你想測試什麼?你只問過最奇怪的MOQ行爲嗎? –
@IlyaPalkin上面只是一個例子,用於演示我在Moq遇到的虛擬/非虛擬屬性時遇到的問題。由於這個問題,我試圖編寫的很多行爲測試用例都失敗了,因爲Activity類的私有方法在內部使用這些屬性並找到它們爲空。 – 101V