Тестирование данных Entity Framework путем нажатия на базу данных - PullRequest
2 голосов
/ 29 августа 2011

Я пытаюсь проверить свои реальные данные, попав в базу данных. Я на самом деле тестирую свои репозитарий классов. Вот пример того, что я делаю;

/// <summary>
/// Summary description for Country
/// </summary>
[TestClass]
public class Country {

    public Country() {
        _countryRepo = new CountryRepository();
    }

    private ICountryRepository _countryRepo;

    [TestMethod]
    public void db_should_return_at_least_one_country_as_approved_all() {

        //Act
        var model = _countryRepo.GetAll();

        //Assert
        Assert.IsTrue(model.Count() >= 1);
    }

    [TestMethod]
    public void db_should_return_at_least_one_country_as_approved_true() { 

        //Act
        var model = _countryRepo.GetAll(ApprovalStatus.Approved);

        //Assert
        Assert.IsTrue(model.Count() >= 1);
    }

    [TestMethod]
    public void db_should_return_Turkey_as_country_name_by_id() {

        //Act
        var model = _countryRepo.GetSingle(1000);

        //Assert
        Assert.AreEqual<string>("Turkey", model.CountryName);

    }

    [TestMethod]
    public void db_should_return_Turkey_as_country_name_by_countryISO3166Code() {

        //Act
        var model = _countryRepo.GetSingle("TR");

        //Assert
        Assert.AreEqual<string>("Turkey", model.CountryName);

    }

    [TestMethod]
    public void db_should_return_Turkey_as_country_name_by_GUID() {

        //Act
        var model = _countryRepo.GetSingle(Guid.Parse("9AF174A6-D0F7-4393-AAAD-B168BADEDB30"));

        //Assert
        Assert.AreEqual<string>("Turkey", model.CountryName);

    }

}

Это хорошо работает для моих нужд, но мне интересно, правильно ли я это делаю по книге. Есть ли какие-то другие шаблоны, которым я действительно должен следовать здесь. Я не хочу подделывать свои данные, моя настоящая задача - проверить мой DAL и реальные производственные данные.

Ответы [ 3 ]

2 голосов
/ 29 августа 2011

Ваши тесты не пройдут, если кто-то (или даже вы) зайдет в вашу базу данных и создаст новую утвержденную страну или изменит название вашей страны. Вы будете думать: «WTH не так с моим хранилищем, почему он не работает, как ожидалось?» Но да, проблема не в хранилище.

Когда я пишу тесты, которые попадают в базу данных, мне нравится создавать БД, загружать значения по умолчанию при запуске и затем уничтожать все сразу. Я не уверен, что это лучшая альтернатива, но она работает довольно хорошо. Проблема этого подхода заключается в том, что он медленнее и требует больше кода.

0 голосов
/ 29 августа 2011

Вы должны использовать статическую базу данных только для тестирования, а ваши методы тестирования GetAll должны соответствовать реальному ожидаемому количеству. Откуда вы знаете, что он действительно вернул то, что вы ожидали, если вы просто утверждаете, что он вернул хотя бы одну запись? Вы должны даже просмотреть набор результатов и проверить, что все записи удовлетворяют условию (но обычно оно используется для более сложных условий).

0 голосов
/ 29 августа 2011

Для данного требования, то есть данных, которые действительно статичны и не должны быть подделаны, я бы сказал, что это правильный подход.

Я бы порекомендовал написать тесты на основе данных , а не повторять один и тот же тестовый пример для каждой страны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...