きょうびの NUnit では NUnit.Framework.Constraints.Constraint から
導出することで俺流検証クラスが定義できるっぽい。
ちょいとやってみる。
using System;
using NUnit.Framework;
using NUnit.Framework.SyntaxHelpers;
using Wankuma.Episteme.Extensions;
namespace Wankuma.Episteme.Extensions {
public class LikeString : NUnit.Framework.Constraints.Constraint {
private string key_;
public LikeString(string key) { key_ = key; }
// 検証メソッド
public override bool Matches(object actual) {
this.actual = actual;
string val = actual as string;
// actualが文字列であり、key_を含むならtrue
return val != null && val.Contains(key_);
}
// 出力
public override void WriteDescriptionTo(MessageWriter writer) {
writer.WriteExpectedValue(key_);
writer.Write("っぽい文字列");
}
}
// 文字列に "っぽい" を拡張
public static class ConstraintExtension {
public static Constraint っぽい(this string arg) {
return new LikeString(arg);
}
}
}
namespace NUnitTrial {
[TestFixture]
public class Class1 {
[Test]
public void one() {
Assert.That( "わんくま", "くま".っぽい());
}
[Test]
public void two() {
Assert.That( "にゃんとら", "くま".っぽい());
}
}
}
実行結果:
お、おもしれぇぢゃねーか♪