为了账号安全,请及时绑定邮箱和手机立即绑定

IOC / 注入流读取器,流编写器依赖项

IOC / 注入流读取器,流编写器依赖项

C#
蛊毒传说 2022-08-20 15:22:19
我希望学习如何正确注入来自.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。谢谢!


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信