C# 对以文件名为参数的方法的测试和正确放置感到困惑
我有一段代码,它使用.mp3文件的文件路径生成一个类Id3v1Tag。我在一个WPF MVVM应用程序中使用它,和其他许多应用程序一样,我一直痴迷于以“正确”的方式设计我的应用程序,所以我试图找出将代码放在哪里。最初它位于Id3v1Tag(继承的代码库)的构造函数中,但我将其取出并放入一个名为Id3v1TagService的类中。但是测试呢?由于它以文件名作为参数,它现在是否依赖于文件服务?您需要将文件的加载与服务中的其他逻辑分离开来。源可能存在于由文件名标识的磁盘上,这一事实与Id3v1TagService无关。相反,它会传递一条小溪。打开/关闭文件的逻辑属于另一个类 这是一个更好的设计,因为:-C# 对以文件名为参数的方法的测试和正确放置感到困惑,c#,design-patterns,domain-driven-design,C#,Design Patterns,Domain Driven Design,我有一段代码,它使用.mp3文件的文件路径生成一个类Id3v1Tag。我在一个WPF MVVM应用程序中使用它,和其他许多应用程序一样,我一直痴迷于以“正确”的方式设计我的应用程序,所以我试图找出将代码放在哪里。最初它位于Id3v1Tag(继承的代码库)的构造函数中,但我将其取出并放入一个名为Id3v1TagService的类中。但是测试呢?由于它以文件名作为参数,它现在是否依赖于文件服务?您需要将文件的加载与服务中的其他逻辑分离开来。源可能存在于由文件名标识的磁盘上,这一事实与Id3v1Tag
- 关注点是分开的
- 您可以测试Id3v1TagService,而无需安装文件系统
- Id3v1TagService现在可以用于通过https、数据库等到达的数据
您仍然需要测试打开/读取/关闭文件的类。这不可避免地会影响到文件系统(因为这就是重点)。如果这是一个琐碎的问题,没有单元测试,您可以将其留给集成测试。您希望传入您的文件访问对象,不管它是什么(这是依赖项注入的一部分),因为这样您就可以模拟它,只测试您尝试测试的类的功能 存储库类、服务或执行文件访问的任何内容都应该使用其中的文件路径