- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在 NancyFx 中创建一个新应用程序,我正在尝试进行测试驱动开发 (TDD) 因此,我想要开发的第一个功能是读取和写入 json 文件。现在我知道这很难做到,因为它涉及 httpContext
,除非应用程序正在运行,否则我显然不能这样做。
我想做的是模拟这个,这样我就可以创建一个单元测试来读取和写入 json 文件。任何人都可以向我展示我如何执行此操作的示例并解释您是如何完成的吗?
我有两种方法,一种用于阅读,一种用于写作,如下所示:
ReadToJsonFile 方法:
public IEnumerable<T> ReadFile<T>(string fileName)
{
try
{
var readFile = File.ReadAllText(HttpContext.Current.Server.MapPath(fileName));
var list = JsonConvert.DeserializeObject<List<T>>(readFile);
return list;
}
catch (Exception ex)
{
_logger.LogException(ex);
return null;
}
}
WriteToJsonFile 方法:
public bool WriteFile<T>(string fileName, IEnumerable<T> list)
{
try
{
var listContent = JsonConvert.SerializeObject(list, Formatting.Indented);
File.WriteAllText(HttpContext.Current.Server.MapPath(fileName), listContent);
return true;
}
catch (Exception ex)
{
_logger.LogException(ex);
return false;
}
}
任何建议都会很棒,谢谢。
最佳答案
我建议您使用适配器或门面来抽象使用 System.IO 静态方法:
public class JsonWriter
{
private readonly IFileSystem _file;
private readonly HttpContextBase _httpContext;
private readonly ILog _logger;
public JsonWriter(
IFileSystem file,
HttpContextBase httpContext,
ILog logger)
{
_file = file;
_httpContext = httpContext;
_logger = logger;
}
public bool WriteFile<T>(string fileName, IEnumerable<T> list)
{
try
{
var listContent = JsonConvert.SerializeObject(list, Formatting.Indented);
_file.WriteAllText(_httpContext.Server.MapPath(fileName), listContent);
return true;
}
catch (Exception ex)
{
_logger.LogException(ex);
return false;
}
}
}
你需要这样的界面:
///<summary>Implementors are wrappers for static methods of System.IO.File and System.IO.Directory
///</summary>
public interface IFileSystem
{
///<summary>Creates a new file, writes the specified string to the file, then closes the file. If the file already exists, it is overwritten.
///</summary>
///<param name="path">The file to write to</param>
///<param name="contents">The string to write to the file</param>
void WriteAllText(string path, string contents);
///<summary>Creates a new file, writes the specified string to the file, then closes the file. If the file already exists, it is overwritten.
///</summary>
///<param name="path">The file to write to</param>
///<param name="contents">The string to write to the file</param>
///<param name="encoding">An <see cref="Encoding"/> object that represents the encoding to apply to the string</param>
void WriteAllText(string path, string contents, Encoding encoding);
}
像这样的实现:
///<summary>Replaces the static methods of System.IO.File
///</summary>
public class FileSystem : IFileSystem
{
///<summary>Creates a new file, writes the specified string to the file, then closes the file. If the file already exists, it is overwritten.
///</summary>
///<param name="path">The file to write to</param>
///<param name="contents">The string to write to the file</param>
public void WriteAllText(string path, string contents)
{
File.WriteAllText(path, contents);
}
///<summary>Creates a new file, writes the specified string to the file, then closes the file. If the file already exists, it is overwritten.
///</summary>
///<param name="path">The file to write to</param>
///<param name="contents">The string to write to the file</param>
///<param name="encoding">An <see cref="Encoding"/> object that represents the encoding to apply to the string</param>
public void WriteAllText(string path, string contents, Encoding encoding)
{
File.WriteAllText(path, contents, encoding);
}
}
现在您可以在单元测试中模拟文件方法和 HttpContext。
关于c# - xUnit 进行 Json 文件读写测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23295972/
我找不到任何关于我认为是一个相当明显的问题的信息。xunit.console.clr4 命令行 arg 帮助状态: usage: xunit.console.clr4 [options] usage
当我们使用 MSTest 时,我们有几个环境有自己的运行设置。由于 Microsoft 正在放弃 MSTest,我们将转向 xUnit。无论是通过运行设置还是命令行属性,我都需要一种在 xUnit 测
我试图使用 OpenCover(今天下载)来覆盖我的测试。这是我使用的命令行: OpenCover.Console.exe -target:"c:\Programmes2\xunit\xunit.co
我正在学习使用单元测试,我创建了一个项目,添加了 xunit 引用。 以及以下代码: namespace UnitTestProject { public partial class Form
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我有一个在 Windows 上构建的程序集 我想在 Linux 中的单声道上运行 xUnit 测试。 但是,我发现虽然其中 400 个测试可以(按顺序)运行,但某些测试要么挂起 xUnit 运行程序,
我有一个 F# 类库,其中包含使用 NuGet 安装的“xUnit.net”和“xUnit.net Runners”包。我有以下代码: module XUnitTest open Xunit [] l
I know that this question has been asked multiple times before I raise it again, However I still cou
我们使用的是 dotCover 2.7 和 xUnit.net 1.9.2。 在我的机器 (Windows 7) 和同事的机器 (Windows 8) 上,我们可以从命令行针对我们使用 xUnit.n
是否可以将 xUnit 与 LINQPad 一起使用? 能够首先为在 LINQPad 中设计的概念编写一些测试会很棒。这比添加另一个 ConsoleApp23423894238 更容易,只是为了能够快
我有一组需要共享状态的 xunit.net 测试。希望我希望这些测试能够并行运行。所以我希望运行者这样做: 创建共享夹具 运行并行所有使用该夹具的测试 在阅读 xunit 文档时,它说要在测试类之间共
我需要跳过基于类中某些 bool 条件的测试方法。是否可以?如何实现?我试过扩展 FactAttribute 但我无法获得 Test 类的实例。 我的代码如下: using System; using
我有兴趣在多个类上重用测试理论,特别是一些需要相同测试的构造函数。我最初有使用委托(delegate)来执行此功能的想法。 但是,我认为我可能正在尝试重新发明轮子,尽管 C# 具有一些功能,但我认为我
我正在为我的 DataAccessRepository(使用 Entity Framework )类编写测试用例。此类在构造函数中采用两个参数。 1)连接对象 2) Automapper 对象 现在,
xUnit 相当于 NUnit 的 [TestFixtureSetUp] ? 我们探索发现IUseFixture相当于[TestFixtureSetUp] ,但它没有按预期工作。 正如我们所探索的(在
Xunit 1.9.x 为用户提供了 DynamicSkipExample.cs 帮助他设置动态跳过 [Fact] 的示例。 事实证明,这在执行一些跨平台开发时非常有用。当由于底层上下文(操作系统、文
我正在尝试使用 xUnit.net 作为 SpecFlow 的测试运行器。来自官方下载区的 SpecFlow 1.2 二进制文件不包含 xUnit.net 提供程序,但 GitHub 上的主分支有一个
当我尝试运行我的 xUnit.net 测试时,出现此错误: [xUnit.net 00:00:00.63] xunit.UnitTest1.TestTheAnswer [FAIL] Fai
我已经转移到 xunit.net 2.0 测试版,但需要 AutoFixture 的一些功能,这仍然取决于当前的 1.9.2 稳定版本 (CompositeDataAttribute)。据我所知 Au
我已经使用 NUnit 多年了,我想尝试 XUnit。所以我安装了 XUnit 并运行了允许您通过 TD.net 运行 XUnit 的可执行文件。 我似乎不能一次运行多个测试。使用 NUnit + T
我是一名优秀的程序员,十分优秀!