Говорят, что если класс использует ресурс внешний, то этот вызов внешний ресурс не проверяется. Итак, если есть учебный класс, как показано ниже;
public interface IVideo
{
string VideoName();
}
public class Video : IVideo
{
public string VideoName()
{
var obj = new VideoReader("videoPath.avi").GetName();
////some other code
}
}
Для модульного тестирования мы должны создать поддельный класс, который унаследовал бы от IVideo и реализовать, как показано ниже:
public string VideoName()
{
return "";
}
У меня вопрос: почему бы нам не протестировать фактический код, который вызывает объект актуальный класс видео?





Вы должны протестировать реальный класс Video. Что вам нужно сделать, так это внедрить экземпляр VideoReader в Video вместо того, чтобы создавать его внутри своего класса. Например.
class Video
{
private VideoReader videoReader;
public Video(VideoReader videoReader)
{
this.videoReader = videoReader;
}
public string VideoName()
{
videoReader.GetName();
////some other code
}
}
var videoReader = new VideoReader("videoPath.avi");
var video = new Video(videoReader);
string name = video.VideoName();
В вашем тесте вы проходите фиктивный VideoReader вместо настоящего.