2011-02-08 2 views
5

Я разрабатываю проект WCF, который будет выставлять веб-службы (на основе HTTP), которые будут потребляться клиентами, внешними по отношению к компании. Я планирую использовать TFS 2010 для непрерывной интеграции.Как выполнить тестирование интеграции для проекта WCF?

Я хочу проводить непрерывное интеграционное и интеграционное тестирование.

мой вопрос:

-does делает интеграционные тесты означает, что я должен создать тестовую среду, которая имитирует производственную среду? -OR означает ли это, что мне просто нужно вызвать вызов WCF, базы данных и других объектов из моего инструмента тестирования единицы, не полагаясь на насмешки? например:

[TestClass] 
public class ServiceIntegrationTest 
{ 
    private static ServiceHost serviceHost; 

    [ClassInitialize] 
    public static void MyClassInitialize(TestContext testContext) 
    { 
     serviceHost = new ServiceHost(typeof(Service1), new [] { new Uri("http://127.0.0.1:8001/") }); 
     serviceHost.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), "Service1"); 
     serviceHost.Open(); 
    } 

-I действительно не понимаю, как осуществить это. -У вас есть учебник с реальными проектами .NET (WCF) о том, как это осуществить?

ответ

2

Я не эксперт в том, как правильно разбить модульное тестирование с помощью mocks и остальное, но я могу поделиться своим опытом по интеграции с WCF/базой данных.

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

[ClassInitialize] 
public static void MyClassInitialize(TestContext testContext) 
{ 
    GlobalBackend.EnsureStarted(); 
} 

Я не знаю ни одного примера в Интернете, вы, вероятно, придется сделать некоторые более прибегая для этого.

Что касается гранулярности для написания ваших тестов, вы говорили об интеграционных тестах. Это похоже на то, что вы, вероятно, хотите протестировать свои служебные вызовы, подключенные к реальной базе данных. Скажем, у вас есть некоторые функции CRUD, запеченные в ваших сервисах, один модульный тест (интеграционный тест в этом контексте) может создать виджет (или что-то еще), а затем вызвать вызов loadWidget, чтобы убедиться, что виджет был создан правильно.

Сколько проверок в рамках одного теста (в зависимости от того, выполняете ли вы интеграционное тестирование или более гранулированное модульное тестирование) является предметом, который может заполнить многие книги.

EDIT: Кроме того, возможно, потребуется сделать некоторые очистки/выключение из базы данных/услуг:

MSDN Страница на AssemblyCleanup attribute.

[AssemblyCleanup()] 
public static void AssemblyCleanup() 
{ 
    GlobalBackend.ShutDown(); 
} 

Конечно, это может привести к просто положить весь код запуска в:

[AssemblyInitialize()] 
public static void AssemblyInit(TestContext context) 
{ 
     GlobalBackend.EnsureStarted(); 
} 

Так что теперь я более четко помнить, - мы закончили тем, что делали это в конце концов (меньше кода)

+0

wow. спасибо за этот отработанный ответ. – Attilah

Смежные вопросы