1 回答
TA贡献1807条经验 获得超9个赞
看起来您正试图将基础设施问题与应用程序代码分离。
假设是这种情况,您需要一个负责读取数据的类:
public interface IDataReader
{
Task<object> ReadJsonByKey(string jsonPath, string jsonKey)
}
其实现将是您上面的代码:
public class DataReader : IDataReader
{
public async Task<object> ReadJsonByKey(string jsonPath, string jsonKey)
{
// First - is it okay to have an initialization at this stage?
var value = new object();
// Second - is this fine to have this in the scope of this method?
using (TextReader reader = File.OpenText(jsonPath))
{
// Third - Calling Jobject that accepts new instance of JsonTextReader
var jObject = await JObject.LoadAsync(new JsonTextReader(reader));
obj = jObject.SelectToken(jsonKey);
}
return value;
}
}
但是,这个类现在同时进行文件读取和反序列化,因此您可以进一步分为:
public class DataReader : IDataReader
{
IDeserializer _deserializer;
public DataReader(IDeserializer deserializer)
{
_deserializer = deserializer;
}
public async Task<object> ReadJsonByKey(string jsonPath, string jsonKey)
{
var json = File.ReadAllText(jsonPath);
return _deserializer.Deserialize(json, jsonKey);
}
}
这意味着现在可以IDeserializer独立于文件系统依赖项进行单元测试。
但是,主要的好处应该是您现在可以IDataReader在对应用程序代码进行单元测试时模拟实现。
- 1 回答
- 0 关注
- 171 浏览
添加回答
举报