Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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# 单元测试时模拟Newtonsoft.Json_C#_Unit Testing_Exception_Json.net_Nunit - Fatal编程技术网

C# 单元测试时模拟Newtonsoft.Json

C# 单元测试时模拟Newtonsoft.Json,c#,unit-testing,exception,json.net,nunit,C#,Unit Testing,Exception,Json.net,Nunit,我目前正在测试一个类,该类读取嵌入的json文件,反序列化并将其加载到我的DI容器中。这是一个tl;代码的dr,省略错误处理: private readonly IAssemblyManager _assemblyManager; private readonly IContainerRegistry _containerRegistry public void Load(string resourceName) { string json = _assemblyManager.Loa

我目前正在测试一个类,该类读取嵌入的json文件,反序列化并将其加载到我的DI容器中。这是一个tl;代码的dr,省略错误处理:

private readonly IAssemblyManager _assemblyManager;
private readonly IContainerRegistry _containerRegistry

public void Load(string resourceName)
{
    string json = _assemblyManager.LoadResource(resourceName);

    IConfiguration config = JsonConvert.DeserializeObject<Configuration>(json);

    _containerRegistry.RegisterInstance<IConfiguration>(config);
}

但是对于我的应用程序,我想使用
iasemblymanager
来加载sql&json,我并不希望它负责反序列化任何东西。我还将问题从一个类转移到另一个类。

Newtonsoft.JSON没有正式的依赖注入包。要测试您的代码,没有办法创建包装,除非您找到一个模拟静态方法的模拟框架。

Newtonsoft.JSON没有官方的依赖项注入包。要测试代码,没有办法创建包装器,除非找到模拟静态方法的模拟框架。

你说你想测试JsonConvert,但你想说你想在不依赖JsonConvert的情况下进行测试,对吗?也就是嘲笑它。这是很好的做法,但就我个人而言,我从来没有必要嘲笑它。即使在您的示例中,我也不认为有必要对JsonConvert进行模拟。我并不特别关心测试
JsonConvert.Deserialize
方法,但我对模拟其行为感兴趣。就我而言,它可以返回值、返回null或抛出异常,我想在我的测试中解决这些场景。在对象注册到容器后,我有一些代码来验证它是否已注册,我真的不想在测试中遵守
Newtonsoft.Json
的规则,我不想把它当作具体的东西来对待:/你说你想测试JsonConvert,但你想说你想在不依赖JsonConvert的情况下进行测试,对吗?也就是嘲笑它。这是很好的做法,但就我个人而言,我从来没有必要嘲笑它。即使在您的示例中,我也不认为有必要对JsonConvert进行模拟。我并不特别关心测试
JsonConvert.Deserialize
方法,但我对模拟其行为感兴趣。就我而言,它可以返回值、返回null或抛出异常,我想在我的测试中解决这些场景。在对象注册到容器后,我有一些代码来验证它是否已注册,我真的不想在测试中遵守
Newtonsoft.Json
的规则,我不想将其视为具体的:/
public interface IAssemblyManager
{
    T LoadResource<T>(string resourceName);
}