不是单元测试外部代码



据说如果一个类使用外部资源,那么不会测试该外部资源调用。所以,如果有像下面这样的;

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而不是真实的东西。

最新更新