При использовании сторонней библиотеки, которая не предоставляет средства удвоения теста для модульного тестирования, лучше всего создать дублируемый тест Фасад . Создайте класс, единственной обязанностью которого является предоставление тестируемого дублируемого интерфейса в стороннюю библиотеку. Он ничего не делает, только передает вызовы в библиотеку, но делает это так, что вы можете связать его с абстракцией и высмеять.
Например:
public interface IMyDllObject
{
object DllObject { get; set; }
object GetEligibleEmp(int id);
}
public class MyDllObject : IMyDllObject
{
object DllObject { get; set; }
object GetEligibleEmp(int id)
{
DllObject.GetEligibleEmp(id);
}
}
// elsewhere in your code:
IMyDllObject myDllObject = CreateMyDllObject(); // Factory method, can return test double
// elsewhere elsewhere
var eligibleEmp = myDllObject.GetEligibleEmp(id);
Тем не менее, не делайте этого для каждой функции / класса / метода в библиотеке! Это, вероятно, не нужно. Удваивайте только то, что зависит от внешних ресурсов, которыми вы не можете управлять в модульном тесте, таких как файлы или сетевые коммуникации.