Тест Nunit на linq to sql набор результатов в представлении - PullRequest
0 голосов
/ 20 ноября 2011

У меня есть модель, которая содержит ссылку на SQL-запрос, который извлекает информацию из моей базы данных, а затем зацикливаю ее в своем представлении, которое отображает частичное с набором результатов в таблице. Довольно просто и понятно. Хотя, поскольку я действительно изо всех сил пытаюсь стать лучше в выполнении TDD, я хочу пройти тест на это. Имейте в виду, что если вы найдете тест, который заставит меня переосмыслить свой дизайн, это просто прекрасно. Тесты должны помочь вам увидеть недостатки в ваших шаблонах дизайна. Я опубликую часть кода ниже моей модели, а частично:

public class ApplicationModel
{
    public static DeployEntities DeployEntities = new DeployEntities();

    public static IQueryable<Application> GetApplicationList()
    {
        var applications = DeployEntities.Applications.OrderByDescending(a => a.Name);
        return applications.AsQueryable<Application>().Distinct();
    }
}


@{  
  foreach (var a in Deploy.Models.ApplicationModel.GetApplicationList())
                    {      
                <tr id="applications">
                    <td class="row-heading">
                        <p class="pseudo">@a.Name</p>  
                    </td> 
                    <td class="insert-col">
                    <div class="number-insert">
                        <p>Deploy Number</p>
                        <span class="count"></span>
                    </div>

Так что любые мысли о том, как я мог бы пройти с тестом для этого. Я использую MVC3, как вы можете видеть из синтаксиса Razor и Entity Framework. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 20 ноября 2011

Несмотря на то, что я действительно изо всех сил пытаюсь улучшить TDD, я хочу пройти тест на это.

Следующая строка разрушает вашу модель:

public static DeployEntities DeployEntities = new DeployEntities();

Статическая жестко запрограммированная зависимость => Невозможно провести модульное тестирование вашей модели изолированно.

Чтобы ослабить связь между вашим DAL и моделью, вы можете ввести абстракцию:

public interface IApplicationRepository
{
    IQueryable<Application> GetApplications();
}

, и тогда ваша модель может использовать инжекцию конструктора:

public class ApplicationModel
{
    private readonly IApplicationRepository _repository;
    public ApplicationModel(IApplicationRepository repository)
    {
        _repository = repository;
    }

    public static IQueryable<Application> GetApplicationList()
    {
        var applications = _repository.OrderByDescending(a => a.Name);
        return applications.AsQueryable<Application>().Distinct();
    }
}

Теперь в модульном тесте вы могли бы использовать среду моделирования, такую ​​как Rhino Mocks или Moq, чтобы смоделировать этот репозиторий и установить на него ожидания и иметь возможность модульного тестирования метода GetApplicationList в отдельности.

0 голосов
/ 20 ноября 2011

В шаблоне Model View Controller тестируемой единицей является контроллер.Таким образом, в вашем случае вы бы написали модульный тест для функции вашего контроллера.

Следует проверить, возвращаются ли все приложения, упорядочены по имени и без дубликатов.

Как ваше представление отображает эту информациювыходит за рамки данного модульного теста.

Конечно, вы можете посмотреть кодовые тесты пользовательского интерфейса.Эти тесты проверяют, показывает ли ваш пользовательский интерфейс правильные данные и правильно ли реагирует на пользовательские события.

...