未进行单元测试的外部代码

时间:2018-08-15 21:03:30

标签: unit-testing nunit

据说,如果类使用外部资源,则不会测试该外部资源调用。因此,如果有如下所示的课程

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 "";
        }

我的问题是为什么我们不测试调用实际视频类对象的实际代码

1 个答案:

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