[TestFixture]
public class AssertTest
{
private BaseTest btest;
private BaseTest btest1;
private ITest itest;
private ITest itest1;
private Test test;
private Test test1;
private List<Test> list;
private List<Test> list1;
private readonly string strTest = "abcdefg";
private readonly string strTest1 = "abc";
private readonly string strTest2 = "efg";
private readonly string strTest3 = "AbcDeFg";
[SetUp]
public void Init()
{
btest = new BaseTest();
itest = new Test();
test = new Test();
list = new List<Test>
{
test
};
btest1 = new BaseTest();
itest1 = new Test();
test1 = new Test();
list1 = new List<Test>
{
test1
};
}
#region 同等断言,重载支持普通值类型
[Test]
public void AreEqualObject()
{
// 成功,float型和double型的数值通常使用一个附加参数来进行比较,这个参数代表一个误差,在这个误差范围内,它们视为相等。
Assert.AreEqual(5, 5.0);
}
[Test]
public void AreNotEqual()
{
Assert.AreNotEqual(5, 6);
}
/// <summary>
/// 一维数组长度,值相同
/// </summary>
[Test]
public void AreEqualArray()
{
var arrStr = new string[] { "1", "2", "3" };
var arrStr1 = new string[] { "1", "2", "3" };
Assert.AreEqual(arrStr, arrStr1);
}
#endregion
#region 一致性断言,判断两个参数引用一致
[Test]
public void AreSame()
{
Assert.AreSame(test, test);
}
[Test]
public void AreNotSame()
{
Assert.AreNotSame(test, test1);
}
[Test]
public void Contains()
{
Assert.Contains(test, list);
}
#endregion
#region 比较断言,测试一个值类型小于或大于另一个值类型
[Test]
public void Greater()
{
Assert.Greater(6, 5);
}
[Test]
public void GreaterOrEqual()
{
Assert.GreaterOrEqual(5, 5);
}
[Test]
public void Less()
{
Assert.Less(4, 5);
}
[Test]
public void LessOrEqual()
{
Assert.LessOrEqual(5, 5);
}
#endregion
#region 类型断言
/// <summary>
/// 判断一个对象的类型是否是期望的类型
/// </summary>
[Test]
public void IsInstanceOfType()
{
Assert.IsInstanceOf(typeof(Test), test);
Assert.IsInstanceOf<Test>(test);
}
/// <summary>
/// 判断对象是否是类型的子类
/// </summary>
[Test]
public void IsInstanceOfTypeInterface()
{
Assert.IsInstanceOf<ITest>(test);
}
/// <summary>
/// 判断对象是否是类型的子类
/// </summary>
[Test]
public void IsInstanceOfTypeBase()
{
Assert.IsInstanceOf<BaseTest>(test);
}
[Test]
public void IsNotInstanceOfType()
{
Assert.IsNotInstanceOf(typeof(ITest), btest);
Assert.IsNotInstanceOf<Test>(btest);
}
/// <summary>
/// 判断一个对象的类型是否属于某种类型,判断对象是否是类型的父类
/// </summary>
[Test]
public void IsAssignableFrom()
{
Assert.IsAssignableFrom<Test>(test);
Assert.IsAssignableFrom<Test>(itest);
Assert.IsAssignableFrom<Test>(btest);
}
#endregion
#region 条件测试断言
[Test]
public void IsTrue()
{
Assert.IsTrue(1 == 1);
}
[Test]
public void IsFalse()
{
Assert.IsFalse(1 == 0);
}
[Test]
public void IsNull()
{
object obj = null;
Assert.IsNull(obj);
}
[Test]
public void IsNotNull()
{
Assert.IsNotNull(test);
}
/// <summary>
/// 值是否是数字 not a number
/// 返回NaN的运算有如下三种:
// 至少有一个参数是NaN的运算
// 不定式
//下列除法运算:0/0、∞/∞、∞/−∞、−∞/∞、−∞/−∞
//下列乘法运算:0×∞、0×−∞
//下列加法运算:∞ + (−∞)、(−∞) + ∞
//下列减法运算:∞ - ∞、(−∞) - (−∞)
//产生复数结果的实数运算。例如:
//对负数进行开偶次方的运算
//对负数进行对数运算
//对正弦或余弦到达域以外的数进行反正弦或反余弦运算[1]
/// </summary>
[Test]
public void IsNaN()
{
var d = Math.Sqrt(-1);
Assert.IsNaN(d);
}
[Test]
public void IsEmpty()
{
var s = "";
Assert.IsEmpty(s);
}
[Test]
public void IsNotEmpty()
{
string s = null;
Assert.IsNotEmpty(s);
}
[Test]
public void IsCollectEmpty()
{
var c = new string[] { };
Assert.IsEmpty(c);
}
[Test]
public void IsCollectNotEmpty()
{
Assert.IsNotEmpty (list);
}
#endregion
#region StringAssert断言
[Test]
public void StringContains()
{
// 预期包含实际
StringAssert.Contains(strTest1, strTest);
}
[Test]
public void StringStart()
{
StringAssert.StartsWith(strTest1, strTest);
}
[Test]
public void StringEnd()
{
StringAssert.EndsWith(strTest2, strTest);
}
[Test]
public void StringEqualIgnoringCase()
{
StringAssert.AreEqualIgnoringCase(strTest3, strTest);
}
#endregion
#region 实用方法
[Test]
public void AssertStringContains()
{
if (strTest.IndexOf(strTest1) < 0)
Assert.Fail("123");
}
#endregion
}
class BaseTest { }
interface ITest { }
class Test : BaseTest, ITest
{
}