[プログラミング]環境改善 その1
gnarlさんが、とっても便利な拡張メソッドを書かれていたので、
ありがたく頂きました。
public static class AssertExtention { public static void ShouldBe<T>(this T target, T expected) { Assert.AreEqual(target, expected); } public static void ShouldNotBe<T>(this T target, T expected) { Assert.AreNotEqual(target, expected); } public static void ShouldBeGreaterThan<T>(this T target, T expected) where T : IComparable { Assert.Greater(target, expected); } public static void ShouldBeLessThan<T>(this T target, T expected) where T : IComparable { Assert.Less(target, expected); } }
ちょっと改良させて頂いて、こんな感じでいかがでしょうか。
ほかの細々したのはShouldBe使えば、いらないですしね。
[プログラミング]環境改善 その2
もう一つ、同じ場所にgnarlさんの書かれた例外テストの静的クラスの方もすばらしく便利なので、
ThrowsNothing()を追加して、ダミーテストを可能にして利用させて頂いています。
それとは別にテストではなく、実際の関数でも戻り値が例外で戻ってくる奴が気持ち悪かったんですが、コードを流用させて頂き、boolを返すようにしてみました。
public static class Does { public static OperationHolder Func(OperationDelegate op) { return new OperationHolder(op); } public delegate void OperationDelegate(); public class OperationHolder { public OperationHolder(OperationDelegate o) { op = o; } private readonly OperationDelegate op; public bool Throw<T>() where T : Exception { try { op(); } catch (T) { return true; } //予定された例外 catch (Exception) { throw; } //やっちゃいました return false; } public bool Throw<T1, T2>() where T1 : Exception where T2 : Exception { try { op(); } catch (T1) { return true; } //予定された例外1 catch (T2) { return true; } //予定された例外2 catch (Exception) { throw; } //やっちゃいました return false; } } }
クラス名がDoesというのは何か引っかかりますが
if (Does.Func(() => str = streamreader.ReadLine()).Throw<System.IO.IOExeption>()) { return ""; }
こんな感じで書けるようになって幸せ。
これで例外のトラップも手を抜かずに済む。かも。