• assertThat XUnit改进


    厌烦了assert.AreEqal();等等一堆的assert方法了吗? 偶然觅得下面这个奇思妙想
    看看下面这个:    
     
    assertThat(something, eq("Hello"));
    assertThat(something, eq(
    true));
    assertThat(something, isA(Color.
    class));
    assertThat(something, contains(
    "World"));
    assertThat(something, same(Food.CHEESE));
    assertThat(something, NULL);
    assertThat(something, NOT_NULL);
     
    第二个参数是一个constraint对象.也就是你对something所要检查的约束.

    这个功能实在很cool.

    1. 没有了那么多的assert方法,看上去很舒服,也更容易理解.

    2. 可以方便的组合约束
         
    assertThat(something, not(eq("Hello")));
    assertThat(something, not(contains(
    "Cheese")));

    3. 自定义约束.  
      
      assertThat(something, between(1020)); 
            
    public Constraint between(final int min, final int max) {
               
    return new Constraint() {  
                 
    public boolean eval(Object object{
                   
    if (!object instanceof Integer) {
                      
    return false;
                   }

                   
    int value = ((Integer)object).intValue();
                   
    return value > min && value < max;
                 }

               }

            }

        
       其实这里面也就是个责任分离的思想.为啥我们想不到? 当然放到Nunit中, 这个constraint可以通过Delegate来实现. 自己模拟了一下NUnit下的实现, 不知有没有更好的实现?
    using System;

    namespace xnUnit
    {

        
    class Constraint
        
    {
            
    public delegate bool EvalDelegate(object obj);

            
    public EvalDelegate EvalHandle; 

            
    public bool Eval(object obj)
            
    {
                
    return EvalHandle(obj);
            }

        }

       
        
    class Assert
        
    {
            
    public static void AssertThat(object obj,Constraint con)
            
    {
                
    if (con.Eval(obj))
                
    {
                    Console.WriteLine(
    "Pass");
                }

                
    else
                
    {
                    Console.WriteLine(
    "Failed!");
                }

            }

        }

    }


    using System;


    namespace xnUnit
    {
        
    class Program
        
    {
            
    public static Constraint Between(int min, int max)
            
    {
                Constraint con 
    = new Constraint();
                con.EvalHandle 
    = delegate(object obj)
                                
    {
                                    
    int value = Convert.ToInt32(obj);
                                    
    return value > min && value < max;
                                }
    ;
                
    return con;
            }


            
    static void Main(string[] args)
            
    {
                Assert.AssertThat(
    3, Between(24));
            }

        }

    }

  • 相关阅读:
    Spring Security11、登录用户管理
    Spring Security10、账号登录并发控制
    win10下怎么打开notepad++多个实例
    gnu make
    es学习记录
    upj
    JConsole连接远程Java进程
    常用的几种成本核算方法
    SQL SERVER 统计字符串中某字符出现的次数
    centos误删除系统自带的python解决方法
  • 原文地址:https://www.cnblogs.com/idior/p/155919.html
Copyright © 2020-2023  润新知