public partial class TestObjectCode
{
/// <summary>
/// We don't make constructor public and forcing to create object using
/// <see cref="Create"/> method.
/// But constructor can not be private since it's used by EntityFramework.
/// Thats why we did it protected.
/// </summary>
protected TestObjectCode() {}
public static TestObjectCode Create(
DateTime executiontime,
Int32 conditionid,
String conditionname)
{
var @objectToReturn = new TestObjectCode
{
ExecutionTime = executiontime,
ConditionId = conditionid,
ConditionName = conditionname
};
return @objectToReturn;
}
public virtual Int32 ConditionId { get; set; }
public virtual String ConditionName { get; set; }
public virtual DateTime ExecutionTime { get; set; }
}
Тест:Autofixture для Перечня объекта, который имеет защищенный конструктор и фабричный метод
[Test]
[TestCase("1/1/2015", "07/5/2016")]
public void Task Should_Filter_By_Date_Range_Only(string startDate, string endDate)
{
//Arrange
var startDateTime = DateTime.Parse(startDate);
var endDateTime = DateTime.Parse(endDate);
//get randomDate between two Dates
TimeSpan timeSpan = endDateTime - startDateTime;
var randomTest = new Random();
TimeSpan newSpan = new TimeSpan(0, randomTest.Next(0, (int)timeSpan.TotalMinutes), 0);
DateTime newDate = startDateTime + newSpan;
var list = new List<TestObjectCode>();
_fixture.AddManyTo(list);
_fixture.Customize<TestObjectCode>(
c => c
.With(x => x.ExecutionTime, newDate)
.With(x => x.ConditionId, 1)
);
_fixture.RepeatCount = 7;
_fixture.AddManyTo(list);
}
Выше испытания не удается из-_fixture.Customize и моей CTOR быть proetced. если я сделаю его общедоступным, это сработает, но я бы хотел, чтобы это было сделано. этот класс имеет еще 15 свойств, которые я не перечислял здесь. также мне нужна дата randmon между двумя dateRanges для каждого элемента в списке.
Как я могу назвать заводский метод создания? мне нужно определить autoFixure для каждого свойства?
Ploeh.AutoFixture.ObjectCreationException: Украшенные ISpecimenBuilder не может создать экземпляр на основе запроса: EMR.Entities.AbpAuditLogs. Это может произойти, если запрос представляет собой интерфейс или абстрактный класс; если это так, зарегистрируйте ISpecimenBuilder, который может создавать образцы на основе запроса. Если это происходит в строго типизированном выражении Build, попробуйте поставить фабрику, используя один из методов IFactoryComposer.
, который работает, но только первый объект в списке следует правилам настройки для _fixture.AddManyTo (list); остальная часть предметов случайна –