据说,如果类使用外部资源,则不会测试该外部资源调用。因此,如果有如下所示的课程;
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 "";
}
我的问题是为什么我们不测试调用实际视频类对象的实际代码?
答案 0 :(得分:1)
您应该测试实际的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
而不是真实的东西。