Как выполнить модульное тестирование репозитория WCF, зависящего от базы данных, и заставить их откатиться после теста? - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть несколько кодов, которые извлекают данные через linq to sql из wcf, которые абстрагируются в dll. гмм.

так что в основном мой тест включает создание некоторых записей в две таблицы, и мне нужно убедиться, что запись таблицы B имеет правильную ссылку на запись таблицы A.

так что я гуглял и нашел это предыдущее обсуждение, и метод, который выглядел довольно удивительным для меня, был тот, который использует объем транзакции.

поэтому я изменяю свой юнит-тест на:

    [Test, DataRollBack]
    public void TestCreateWarrantNumber_CreateNewWarrant_Return_NewWarrantID()
    {
    string userName = "headauth";

    using (TransactionScope scope = new TransactionScope())
    {
        IdbRepository repository = new dbRepository();
        DataServiceContext db = new DataServiceContext();

        int Id = repository.CreateProduct(Ids, userName);

        var foundId = (from w in db.Transactions
                              where w.Ref == Id.ToString()
                              select w).OrderBy(w => w.Id).FirstOrDefault();

        int foundId = 0;
        if (foundNumberId != null)
        {
            foundId = foundNumberId.Id;
        }

        Assert.AreEqual(Id, foundId,
                        "Transaction must be assigned successfully to the new product.");
    }
}

каким-то образом каждый раз, когда я запускаю этот тест в vs2010, он не работает, и я вижу, что в моей базе данных эта запись создается в таблице продукта при каждом запуске этого теста.

Так что я думаю, что самый простой способ проверить это просто связать его с базой данных и протестировать его таким образом, но сейчас мне нужно то, как мне откатываться каждый раз, когда тест проводится?

есть идеи, что я здесь делаю не так? спасибо

Обновление:

После включения кода неисправности я все еще не могу проверить без выполнения вставки данных в таблицу. и я попробуйте nunitx метод, но тоже безрезультатно: (

1 Ответ

1 голос
/ 28 ноября 2011

Транзакция по умолчанию не расширяется через границы процесса. Вам нужно включить это в вашем сервисе, а затем использовать правильные привязки.

Здесь Вы можете найти информацию.

Если ваша служба WCF не поддерживает транзакции и вы не можете изменить код, я думаю, что вы застряли со вторым вариантом (непосредственно в базе данных без WCF). Тогда вы TransactionScope включат изменения вашей базы данных и автоматически откатятся, когда вы выйдете из области действия (поскольку вы не вызываете 'Commit')

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