标签:unit-testing nunit tdd c tdd nunit
我正在尝试将tdd与nunit进行比较,并且针对CachedEnumerable< T>编写了以下测试类:
[Test]
public void CanNestEnumerations()
{
var SourceEnumerable = Enumerable.Range(0, 10).Select(i => (decimal)i);
var CachedEnumerable = new CachedEnumerable<decimal>(SourceEnumerable);
Assert.DoesNotThrow(() =>
{
foreach (var d in CachedEnumerable)
{
foreach (var d2 in CachedEnumerable)
{
}
}
});
}
>是否会优化嵌套的for循环,因为它们不会这样做
什么(循环后再也不会使用CachedEnumerable)?
>是否有其他情况可以优化测试代码
出来吗
>如果是这样,我如何确保测试代码实际运行?
解决方法:
它不会被优化,因为还有更多的事情在进行.该代码实际上更像(改编自已接受的答案here):
using (IEnumerator<Foo> iterator = CachedEnumerable.GetEnumerator())
{
while (iterator.MoveNext())
{
var d = iterator.Current;
// Other loop
}
}
编译器不知道调用MoveNext / Current是否有副作用,因此必须调用它们.如果不使用d,则可能会优化分配.但是它仍然必须调用Current.另一个循环也是如此.
所做的优化不应对您的代码产生任何逻辑影响.它只会删除无效或在正常情况下永远不会被调用的内容.
标签:unit-testing,nunit,tdd,c,tdd,nunit 来源: https://codeday.me/bug/20191102/1990862.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。