我有以下幫助器方法,它將驗證消息從DbEntityValidationException中取出。我們需要這個,因爲默認情況下驗證的細節不會添加到Exception中。如何爲依賴於DbEntityEntry的對象創建單元測試
public static string LogMessageDbEntityValidationException(DbEntityValidationException ex)
{
StringBuilder error = new StringBuilder();
error.AppendLine("Validation Error details for DbEntityValidationException throw: ");
foreach (var validationErrors in ex.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
error.AppendLine(string.Format("Property: {0} , Error: {1}",
validationError.PropertyName, validationError.ErrorMessage));
}
}
return error.ToString();
}
我碰到試圖創建單元測試的問題,特別是因爲它需要DbEntityEntry,它不具有公共構造的一個實例,我不能創建一個DbEntityValidationResult。
這裏被打破單元測試,它無法在創建DbEntityEntry:
public void LogMessageDbEntityValidationExceptionTest()
{
string errorMessage = "Unit Test Error Message";
string expected = "Not valid data.";
List<DbEntityValidationResult> entityValidationResults = new List<DbEntityValidationResult>();
List<DbValidationError> errorList = new List<DbValidationError>();
DbEntityValidationException ex;
errorList.Add(new DbValidationError("TestProperty", expected));
entityValidationResults.Add(new DbEntityValidationResult(new System.Data.Entity.Infrastructure.DbEntityEntry(), errorList));
ex = new DbEntityValidationException(errorMessage, entityValidationResults);
string actual = Common.LogMessageDbEntityValidationException(ex);
Assert.IsTrue(actual.Contains(expected));
}
注意,DbEntityEntry沒有實現一個接口,所以我不能使用模擬/假的。
你有沒有找到解決這個問題的方法? – user1535568 2016-11-17 15:42:17