单元测试时模拟 Newtonsoft.Json
Mocking Newtonsoft.Json When Unit Testing
我目前正在测试一个 class 读取嵌入式 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);
}
我正在使用 NUnit 和 Moq 进行测试,我对测试游戏还很陌生。我想知道测试 JsonConvert
方法的最佳方法,我不得不为我的一些测试编写包装器,但如果我必须在这里这样做,那将是绝对毁灭性的。这是下载次数最多的 NuGet 包,人们肯定遇到过这个问题并且有一个不错的解决方案。我已经使用 System.IO.Abstractions
来测试我的文件访问代码,我原以为 Newtonsoft.Json
.
会有类似的东西
其他可能的解决方法可能是让我的装配经理进行反序列化:
public interface IAssemblyManager
{
T LoadResource<T>(string resourceName);
}
但对于我的应用程序,我想使用 IAssemblyManager
来加载 sql 和 json,我真的不希望它负责反序列化任何内容。我也刚刚将我的问题从一个 class 转移到另一个
Newtonsoft.JSON没有官方的依赖注入包。要测试你的代码,没有办法绕过创建包装器,除非你找到一个模拟静态方法的模拟框架。
我目前正在测试一个 class 读取嵌入式 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);
}
我正在使用 NUnit 和 Moq 进行测试,我对测试游戏还很陌生。我想知道测试 JsonConvert
方法的最佳方法,我不得不为我的一些测试编写包装器,但如果我必须在这里这样做,那将是绝对毁灭性的。这是下载次数最多的 NuGet 包,人们肯定遇到过这个问题并且有一个不错的解决方案。我已经使用 System.IO.Abstractions
来测试我的文件访问代码,我原以为 Newtonsoft.Json
.
其他可能的解决方法可能是让我的装配经理进行反序列化:
public interface IAssemblyManager
{
T LoadResource<T>(string resourceName);
}
但对于我的应用程序,我想使用 IAssemblyManager
来加载 sql 和 json,我真的不希望它负责反序列化任何内容。我也刚刚将我的问题从一个 class 转移到另一个
Newtonsoft.JSON没有官方的依赖注入包。要测试你的代码,没有办法绕过创建包装器,除非你找到一个模拟静态方法的模拟框架。