【问题标题】:Not Unit Testing external code不是单元测试外部代码
【发布时间】:2018-08-15 21:03:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: unit-testing nunit


    【解决方案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 而不是真实的。

    【讨论】:

      猜你喜欢
      • 2011-12-20
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 2014-03-23
      相关资源
      最近更新 更多