Я пытаюсь внедрить новую iframe-версию видео на YouTube и перевести его в автоигру.
Насколько я могу судить, это невозможно сделать, изменив флаги на URL. Есть ли способ сделать это с помощью JavaScript и API?
-121--582747-Я решил начать написание модульных тестов в нашем приложении. Он использует Entity Framework с образцом репозитория.
Теперь я хочу начать тестирование логических классов, которые используют репозитории. Приведу здесь простой пример.
Три из моих методов в классе GenericRepository:
public class GenericRepository : IRepository
{
public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class
{
var entityName = GetEntityName<TEntity>();
return Context.CreateQuery<TEntity>(entityName);
}
private string GetEntityName<TEntity>() where TEntity : class
{
return typeof(TEntity).Name;
}
public IEnumerable<TEntity> Find<TEntity>(Expression<Func<TEntity, bool>> predicate) where TEntity : class
{
return GetQuery<TEntity>().Where(predicate).AsEnumerable();
}
}
Простой логический класс, возвращающий отдельные годы из календарной таблицы в порядке убывания (да, я знаю, что слово calendar неправильно написано в нашем коде):
public class GetDistinctYearsFromCalendar
{
private readonly IRepository _repository;
public GetDistinctYearsFromCalendar()
{
_repository = new GenericRepository();
}
internal GetDistinctYearsFromCalendar(IRepository repository)
{
_repository = repository;
}
public int[] Get()
{
return _repository.Find<Calender_Tbl>(c => c.Year.HasValue).Select(c => c.Year.Value).Distinct().OrderBy(c => c).Reverse().ToArray();
}
}
И вот мой первый тест:
[TestFixture]
public class GetDistinctYearsFromCalendarTest
{
[Test]
public void ReturnsDistinctDatesInCorrectOrder()
{
var repositoryMock = new Mock<IRepository>();
repositoryMock.Setup(r => r.Find<Calender_Tbl>(c => c.Year.HasValue)).Returns(new List<Calender_Tbl>
{
new Calender_Tbl
{
Date =
new DateTime(2010, 1, 1),
Year = 2010
},
new Calender_Tbl
{
Date =
new DateTime(2010, 2, 1),
Year = 2010
},
new Calender_Tbl
{
Date =
new DateTime(2011, 1, 1),
Year = 2011
}
}.AsQueryable());
var getDistinct = new GetDistinctYearsFromCalendar(repositoryMock.Object).Get();
Assert.AreEqual(2, getDistinct.Count(), "Returns more years than distinct.");
Assert.AreEqual(2011, getDistinct[0], "Incorrect order, latest years not first.");
Assert.AreEqual(2010, getDistinct[1], "Wrong year.");
}
}
Это работает нормально. Но это не то, что я хочу сделать. Поскольку мне нужно настроить метод Find на имитационном объекте, я также должен знать, как он будет вызван в моем классе логики. Если я хочу сделать TDD, я не хочу возражать по этому поводу. Все, что я хочу знать, это какие сущности календаря должен предоставить мой репозиторий. Требуется настроить метод GetQuery. Так как
repositoryMock.Setup(r => r.GetQuery<Calender_Tbl>()).Returns(new List<Calender_Tbl>
{
new Calender_Tbl
{
Date =
new DateTime(2010, 1, 1),
Year = 2010
},
new Calender_Tbl
{
Date =
new DateTime(2010, 2, 1),
Year = 2010
},
new Calender_Tbl
{
Date =
new DateTime(2011, 1, 1),
Year = 2011
}
}.AsQueryable());
когда Find вызывает GetQuery внутри класса GenericRepository, он должен получить правильные сущности календаря, которые я настроил в GetQuery. Но это не работает конечно. Поскольку я не настроил метод Find своего имитационного объекта, я не получаю никаких сущностей.
Что же делать? Конечно, я мог бы использовать Moles или какие-то другие рамки, которые издеваются над всем, но я не хочу этого делать. Есть ли что-нибудь, что я могу сделать в разработке класса или теста для решения проблемы?
Это не конец света, если я должен пойти с моим текущим решением, но что, если год собственности превращается в не ничтожный int? Тогда, конечно, мне придется изменить свою реализацию в классе логики, но мне также придется изменить тест. Я хотел бы попытаться избежать этого.