据说如果一个类使用外部资源,那么不会测试该外部资源调用。所以,如果有像下面这样的类;
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
而不是真实的东西。