2016-04-06 6 views
1

У меня есть класс, как показано ниже, и мне нужно протестировать RunMethod. Проблема в том, что ExternalClass требует, чтобы какое-то приложение выполнялось на стороне сервера (приложение, предоставляющее внешние dll). В моей среде разработчиков есть это приложение, но в моей среде для тестирования нет. Мой вопрос в том, как подделать/подделать ExternalClass в UnitTests, чтобы не проверить, существует ли приложение (тест всегда сбой в env без этого внешнего приложения)? Этот класс не важен в тестах, но запускается автоматически, если я запускаю RunMethod.Шлем/поддельный объект с использованием внешнего приложения

public class MyExampleClass : ISomeInterface 
{ 
    private static ExternalClass = new ExternalClass(string someParam); 

    public object RunMethod() 
    { 
     /* Actuall code hear, doesn't matter */ 
     /* few unimportant (from the view point of tester) operation in ExternalClass (object loggin etc.) */ 
     return someVar; 
    } 
} 

ответ

2

MsFakes генерировать свойство с именем AllInstances к классу прокладки, через это свойство можно переопределить поведение любого метода экземпляра:

[TestMethod] 
public void TestMethod1() 
{ 
    using (ShimsContext.Create()) 
    { 
     ShimExternalClass.AllInstances.ToString01 =() => 
     { 
      return String.Empty(); 
     }; 

     Assert.IsNull(new ExternalClass().ToString()); 
    } 
} 
+0

Спасибо за ответ. Но, что, если все методы в моем ** ExternalClass ** недействительны (возвращают nothig, просто делают некоторые материалы журнала) и используют внешнюю сборку (для этой регистрации), которую я не могу предоставить на своем тестовом сервере? –

+0

@JamesTheEvangelist изменяет метод, чтобы ничего не делать: 'ShimExternalClass.AllInstances.Log =() => {};' –

+0

Я просто пытаюсь что-то вроде этого: 'ShimExternalClass.AllInstances.SomeMethod = (null);' и я по-прежнему возникает ошибка: 'Тип 'some lib' определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку сборки. ' –