2014-09-25 4 views
1

Этот код прекрасно работает, когда я отладки модульного тестирования:Design_Time_Address работает в отладчике, но не во время единичного испытания

[TestFixture] 
public class Tests 
{ 
    private ServiceHost _host; 
    private Uri _baseAddress = new Uri(<code>"http://localhost:8733/Design_Time_Addresses/service"</code>); 
    private Inbound.Client.ServiceClient _client; 

    [SetUp] 
    public void Setup() 
    { 
     _host = new ServiceHost(typeof(MyService), _baseAddress); 
     var smb = new ServiceMetadataBehavior(); 
     smb.HttpGetEnabled = true; 
     smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
     _host.Description.Behaviors.Add(smb); 
     _host.Open(); 
     _client = new Inbound.Client.ServiceClient(); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     _client.Close(); 
     _host.Close();   
    } 

    [Test] 
    public void Can_ping() 
    { 
     PingResponse response = _client.Ping(new PingRequest { Echo = "Hi" }); 
     Assert.IsNotNull(response); 
     Assert.AreEqual("Hi", response.Echo); 
    } 
} 

Однако, когда я бегу модульного тестирования (правой кнопкой мыши на тест в VS Test Проводнике, Run Selected Test) Я получаю сообщение об ошибке:

"... System.ServiceModel.ServerTooBusyException : 
The HTTP service located at http://localhost:8733/Design_Time_Addresses is unavailable. ... 
----> System.Net.WebException : The remote server returned an error: (503) Server Unavailable." 

Вероятно, когда тест NUnit бегун запускает тест, он не может запустить хост. Я знаю, что Design_Time_Address uri зарегистрирован в netsh во время установки VS, и мне интересно, должна ли быть дополнительная регистрация только для NUnit test runner.

ответ

2

Design_Time_Address связан с WcfTestClient. Существует свойство проекта WCF «Запустить WCF Service Host при отладке другого проекта в том же решении». Это свойство было проверено. Во время модульного тестирования была запущена отладка тестового клиента WCF. Интересная часть заключалась в том, что _host = new ServiceHost(typeof(MyService), _baseAddress); инициализировал host только что запущенным экземпляром тестового клиента WCF, а не созданием нового экземпляра узла службы. Когда модульный тест проходил за пределами тестового клиента отладчика WCF, он не запускался, а вызов ServiceHost просто не срабатывал.

Проблема заключалась в том, что URL-адрес службы должен быть

(<code>"http://localhost:8733/Design_Time_Addresses"</code>

в отличие от

<code>"http://localhost:8733/Design_Time_Addresses/service

даже если с WCF по умолчанию шаблоны подмостей это "/ Сервис"

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