Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中的单元测试FileWatcher#_C#_Unit Testing - Fatal编程技术网

C# c中的单元测试FileWatcher#

C# c中的单元测试FileWatcher#,c#,unit-testing,C#,Unit Testing,我有一个类,它使用以下方法监视文件: public FileWatcher(List<string> dirsToWatch, string filter, OnChange onChange) { OnChangeEnt = onChange; foreach (var dir in dirsToWatch) { var watcher = new FileSystemWatcher(dir);

我有一个类,它使用以下方法监视文件:

public FileWatcher(List<string> dirsToWatch, string filter, OnChange onChange)
    {
        OnChangeEnt = onChange;

        foreach (var dir in dirsToWatch)
        {
            var watcher = new FileSystemWatcher(dir);
            watcher.Filter = filter;
            watcher.Changed += new FileSystemEventHandler(onChange);
            watcher.Created += new FileSystemEventHandler(onChange);
            watcher.Renamed += new RenamedEventHandler(OnChangeHandler);
            watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.FileName;
            watcher.IncludeSubdirectories = true;
            watcher.EnableRaisingEvents = true;
            _watchers.Add(watcher);
        }
    }
publicfilewatcher(List dirsToWatch、字符串过滤器、OnChange OnChange)
{
onChange=onChange;
foreach(dirsToWatch中的var dir)
{
var-watcher=newfilesystemwatcher(dir);
watcher.Filter=过滤器;
watcher.Changed+=新文件系统EventHandler(onChange);
watcher.Created+=新文件系统EventHandler(onChange);
watcher.rename+=新重命名的EventHandler(OnChangeHandler);
watcher.NotifyFilter=NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.FileName;
watcher.IncludeSubdirectories=true;
watcher.EnableRaisingEvents=true;
_watchers.Add(watcher);
}
}
我只是想知道如何对这个方法进行单元测试以获得100%的覆盖率。
任何帮助都将不胜感激。感谢您始终可以使用mock(如Typemock Isolator),它将被调用的方法与系统调用隔离开来,这样您就可以模拟它们的行为,并编写只针对方法中一个单独用例的测试。您也可以使用一些专门用于此测试的特殊目录,但您必须编写适当的初始化和拆卸脚本。

您可以始终使用模拟(如Typemock)这将把被调用的方法与系统调用隔离开来,这样您就可以模拟它们的行为,并编写只针对方法中一个单独用例的测试。您也可以使用一些专门用于此测试的特殊目录,但您必须编写正确的初始化和拆卸脚本。

FileWatcher
取决于环境(本例中为文件系统)。涉及环境的事物不能进行单元测试。您可以:

  • FileSystemWatcher
    的抽象功能通过一些接口,使
    FileWatcher
    依赖于该接口,并使用模拟接口对
    FileWatcher
    进行单元测试。当您有一些使用依赖于环境的类的相对复杂的行为时,这是有意义的。你想验证这种行为

  • 对您的应用程序进行验收测试。这将涉及到端到端测试,包括在真实文件系统中添加/删除/编辑文件,并验证应用程序是否根据需要对这些更改做出反应


FileWatcher取决于环境(本例中为文件系统)。涉及环境的事物不能进行单元测试。您可以:

  • FileSystemWatcher
    的抽象功能通过一些接口,使
    FileWatcher
    依赖于该接口,并使用模拟接口对
    FileWatcher
    进行单元测试。当您有一些使用依赖于环境的类的相对复杂的行为时,这是有意义的。你想验证这种行为

  • 对您的应用程序进行验收测试。这将涉及到端到端测试,包括在真实文件系统中添加/删除/编辑文件,并验证应用程序是否根据需要对这些更改做出反应


我曾考虑过对类似的功能进行单元测试,但由于您无法模拟文件存储,我想说您无法100%涵盖此类内容(意见)。我唯一可以考虑测试的是,watcher为DirstWatcher添加了文件系统watchers。您是否能够修改测试中的代码?我会建议抽象文件监视程序。你到底想测试什么,文件监视程序的配置还是工作?我在考虑对类似的功能进行单元测试,但是由于你不能模拟文件存储,我会说你不能100%涵盖这类内容(意见)。我认为唯一需要测试的是_watcher为dirstowatcher添加了文件系统监视程序。您能够修改测试中的代码吗?我建议对文件监视程序进行抽象。您到底想测试什么,文件监视程序的配置还是工作?嗨,Martin,我使用Typemock隔离器方法获得了100%的覆盖率thanksHi Martin,我使用Typemock隔离器方法获得了100%的覆盖率thanksHi Martin,谢谢