Ho il seguente metodo di supporto, che accetta i messaggi di convalida dalla DbEntityValidationException. Ne abbiamo bisogno perché i dettagli della convalida non vengono aggiunti all'eccezione per impostazione predefinita.Come creare un test unitario per un oggetto che dipende da 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();
}
ho incontrato un problema cercando di creare unità di prova, in particolare non riesco a creare un DbEntityValidationResult perché richiedeva un esempio di DbEntityEntry, che non ha un costruttore pubblico.
Qui è rotto Unità di prova, non riesce a creare il 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));
}
nota, DbEntityEntry non implementa un'interfaccia, quindi non posso usare un finto/falso.
Hai mai trovato una soluzione a questo problema? – user1535568