CodeGo.net> C#-CopyAndUpdateAssertion-I / O不匹配
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了CodeGo.net> C#-CopyAndUpdateAssertion-I / O不匹配,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2696字,纯文字阅读大概需要4分钟。
内容图文
这个问题与AutoFixture的Idioms nuget中的CopyAndUpdateAssertion的使用有关.
假设一个类与此类似:
public class Foo
{
public static readonly Foo Empty = new Foo(
new Bar1[0],
new Bar2[0]);
private readonly Bar1[] _bars1;
private readonly Bar2[] _bars2;
public Foo(
Bar1[] bars1,
Bar2[] bars2)
{
if (bars1 == null)
throw new ArgumentNullException("bars1");
if (bars2 == null)
throw new ArgumentNullException("bars2");
_bars1 = bars1;
_bars2 = bars2;
}
public Bar1[] Bars1
{
get { return _bars1; }
}
public Bar2[] Bars2
{
get { return _bars2; }
}
public Foo Append(Bar1 value)
{
if (value == null) throw new ArgumentNullException("value");
return new Foo(
_bars1.Concat(new[] {value}).ToArray(),
_bars2);
}
public Foo Append(Bar2 value)
{
if (value == null) throw new ArgumentNullException("value");
return new Foo(
_bars1,
_bars2.Concat(new[] { value }).ToArray());
}
public bool Equals(Foo other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return _bars1.SequenceEqual(other._bars1) &&
_bars2.SequenceEqual(other._bars2);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != GetType()) return false;
return Equals((Foo)obj);
}
public override int GetHashCode()
{
return _bars1.Aggregate(0, (current, next) => current ^ next.GetHashCode()) ^
_bars2.Aggregate(0, (current, next) => current ^ next.GetHashCode());
}
}
假设输入是单值(例如’值’)并且输出的属性是多值(例如’Bars1’属性),是否可以使用CopyAndUpdateAssertion测试Append方法?如果是,应该更换默认管道的哪一部分,您是否可以提供有关我应该从哪里开始寻找的任何指针?
解决方法:
这不是CopyAndUpdateAssertion可以解决的问题,我也不知道可以对它进行调整以测试类似的东西.
您可以在方法上提出各种变体,例如上面的Append方法:在之前而不是之后插入.附加到字符串,而不是替换它.添加到现有号码.等等.
这有点超出复制和更新的概念;它是复制和更新,然后是其他内容.
显然,如果您非常需要诸如上述Append方法之类的方法,那么它们显然会增加价值,但是否则,您也可以考虑采用一种更可组合的方法.
首先,为了使附加到序列更容易,您可以考虑使用如下扩展方法:
public static IEnumerable<T> Append<T>(this IEnumerable<T> source, T value)
{
return source.Concat(new[] { value });
}
如果您认为Foo已经具有“标准” WithBars1复制和更新方法,则可以实现与以下相同的结果:
var foo1 = foo.WithBars1(foo.Bars1.Append(someBar).ToArray());
当然,这行代码比foo1 = foo.Append(someBar)更复杂或更详细,但另一方面,由于它是基于“标准”构建块构建的,因此它所需的测试范围要少得多.
仍然,最终,在用两三个代码库完成了类似的操作之后,这还是促使我转向F#的众多原因之一,其中大多数已经内置于F#中:
let foo' = { foo with Bars1 = foo.Bars1 |> Array.append [| someBar |] }
支持上面的表达式根本不需要任何单元测试,因为它专门使用F#语言功能和内置函数.
内容总结
以上是互联网集市为您收集整理的CodeGo.net> C#-CopyAndUpdateAssertion-I / O不匹配全部内容,希望文章能够帮你解决CodeGo.net> C#-CopyAndUpdateAssertion-I / O不匹配所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。