我希望学习如何正确注入来自.NET Core库的依赖项,如StreamReader和FileStream。如何注射这些?我有一个类,它读取包含一堆人口统计数据的文件中,选择随机抽样,然后将其作为多行字符串返回给其调用方。它通过一个FileStream来访问文件的内容,然后通过一个StreamReader来读取FileStream的内容,这样我就可以操纵文本。但是,我希望使这个单元可测试。如果我需要注入一个我自己创建的类,我会为该类生成一个接口来实现并将其传递到构造函数中,但这是一个.NET Core类型,没有我可以注入的IFileStream,IStreamWriter等。注入这些内容的正确方法是什么,这样我就可以在单元测试期间用模拟代替?namespace MyNS.Lib {using System.IO;using System.Text;using PgpCore;/// <summary>/// A class for PGP encrypting strings./// </summary>public class EncryptUtility{ /// <summary> /// Initializes a new instance of the <see cref="EncryptUtility"/> class. /// </summary> /// <param name="sampler">The CensusSampler needed by the class.</param> public EncryptUtility(CensusSampler sampler) { Sampler = sampler; } /// <summary> /// Encrypts a census file. /// </summary> /// <param name="censusFilePath">The path to the census file.</param> /// <param name="keyPath">The path to the public key file.</param> /// <returns>Returns an encrypted census file.</returns> public string EncryptCensus(string censusFilePath, string keyPath) { using (FileStream census = new FileStream(censusFilePath, FileMode.Open)) { var censusSr = new StreamReader(census); var censusText = censusSr.ReadToEnd(); return EncryptString(censusText, keyPath); } }}}
1 回答
SMILET
TA贡献1796条经验 获得超4个赞
我认为@devNull说的话可能是最有道理的。通过封装依赖于注入和模拟的事物的代码部分,我已经将代码中需要测试的部分与依赖于 .NET Core 运行时的部分分开了。我真的不需要测试CryptitCensus,因为我唯一要测试的是StreamReader可以工作,这似乎没有必要。所以我只测试CryptitString。谢谢!
- 1 回答
- 0 关注
- 76 浏览
添加回答
举报
0/150
提交
取消