C# 带有Linq Any()和All()的TDD

C# 带有Linq Any()和All()的TDD,c#,.net,linq,tdd,C#,.net,Linq,Tdd,我正在编写一个执行Linq查询的方法,并且我正在尝试使用TDD来实现这一点 但是,我的查询现在有一个Any(),但有时我在编写测试后删除或更改代码中的内容,以查看我的测试是否涵盖了应该涵盖的所有内容 然后我开始把Any()改成All()只是为了好玩,我的测试还是通过了 我想知道是否必须检查所有不同的情况,比如我得到所有all()和Any()组合: 假设我的列表包含零个元素(All()将返回true,但Any()将返回false) 假设我的列表包含一些元素,并且只有一个元素满足谓词 假设我的列表包

我正在编写一个执行Linq查询的方法,并且我正在尝试使用TDD来实现这一点

但是,我的查询现在有一个
Any()
,但有时我在编写测试后删除或更改代码中的内容,以查看我的测试是否涵盖了应该涵盖的所有内容

然后我开始把
Any()
改成
All()
只是为了好玩,我的测试还是通过了

我想知道是否必须检查所有不同的情况,比如我得到所有
all()
Any()
组合:

  • 假设我的列表包含零个元素(
    All()
    将返回
    true
    ,但
    Any()
    将返回
    false
  • 假设我的列表包含一些元素,并且只有一个元素满足谓词
  • 假设我的列表包含一些元素,并且所有元素都满足谓词

  • 我在TDD的几本书中读到,人们经常“伪造”代码,只是为了测试失败。但是在这种情况下,我必须编写更多的代码来伪造它。

    解决方案很简单:您显然没有足够的测试来覆盖所有的可能性。在不知道您的域或您正在测试的内容的情况下,您可能需要对其进行测试

    • 空的
    • 不是空的,都满足了
    • 不是空的,有些满足
    • 不是空的,没有满足

    您在测试什么?如果您在没有其他修改的情况下将Any更改为All,则意味着您正在更改方法的结果。我不是要更改结果,而是要检查我的测试是否真的在测试某些内容。