【问题标题】:How to unit test a binary format reader class如何对二进制格式阅读器类进行单元测试
【发布时间】:2013-06-04 05:58:37
【问题描述】:

我正在研究一个读取二进制文件并存储该二进制文件中存在的值的类。

问题是如何对这个类进行单元测试,我做对了什么 现在是,我部署了一个示例文件并为此编写了一个单元测试 仅限特定文件。

示例:- 我知道二进制文件中的第一个值将是一个整数,其值为 60。所以我为此编写了单元测试。我已经为整个文件编写了测试。这些单元测试是否足够?或者我应该多写一些。

示例单元测试。我已经为所有值编写了测试。

[TestMethod]
public void First_Integer_Read_Value_Is_60
{
    // Arrange
    var expected = 60;
    var reader = new MyCustomBinaryReader(filepath);

    // Act
    var actual = reader.FirstValue;

    //
    Assert.AreEqual(expected, actual)
}

reader.FirstValue
{
    get { return BinaryReader.ReadInt32(); }
}

所以我得到了 100% 的代码覆盖率。但这样的测试就足够了吗?我们如何对这些类进行单元测试。

【问题讨论】:

  • 您只是读取文件,还是您的代码也写入文件?
  • 现在只有阅读的东西,但可能我也添加了写作的东西。看需求,暂时没有写代码的打算。

标签: c# unit-testing binaryfiles


【解决方案1】:

如果您只关心 MyCustomBinaryReader 的测试覆盖率,因为您获得了 100% 的代码覆盖率,这意味着您的测试已经充分覆盖了执行“读取”行为的代码。由于您获得了正确的值,因此您也在正确读取文件。

很难知道您的确切要求。但是,如果读取该文件中的每个值对您很重要,那么假设您的所有测试都覆盖了每个值,那么您的数据覆盖率为 100%。这与代码覆盖率无关。

你可以改进什么? 您可以查看使用 DataDriven Tests,而不是创建许多测试 http://msdn.microsoft.com/en-us/library/ms182527.aspx 这种方法允许您轻松更改外部文件/值,而无需重新编译代码。也更少的代码/更少的测试。

你还说目前它只是读东西,但将来可能会写东西。作为当前状态,您的测试已经涵盖了所需的内容(即阅读)。写作要求现阶段不可用,因此您无需担心。

只是一个旁注/不相关:-您的 MyCustomBinaryReader 必须从磁盘读取文件。因此,这不是单元测试,而是数据驱动的集成类型测试。

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多