- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
前一篇:详谈单元测试-xUnit
Assert 是基于代码的返回值、对象的最终状态、事件是否发生等情况来评估测试的结果。Assert 的结果可能是 Pass 或者 Fail。如果所有的 Asserts 都通过了,那么整个测试就通过了。如果任何 Asserts 失败了,那么结果就失败了。
一个 Test 里应该有多少个 Asserts ? 一种简易的做法是,每个 Test 方法里面只有一个 Asserts 。而还有一种建议就是,每个 Test 里面可以有多个 Asserts ,只要这些 Asserts 都是针对同一个行为。
Assert 提高了许多的 API 分别可以对不同的类型进行操作:bool、string、int、object 、collection 等
演示示例:先建一个 .net core 或者 standard 类库项目,再建立一个 xunit 测试项目,创建一个 Programmer(程序员) 类
Assert.True、Assert.False 用于判断期望结果是 true 或者 false。首先给程序员加个属性是否是同时又是 PM:public bool IsPM { get; set; },接着创建 IsPm 的单元测试
public class ProgrammerTests
{
[Fact]
public void IsPm()
{
// Arrange
var programmer = new Programmer();
// Act
var result = programmer.IsPM;
// Assert
Assert.True(result);
}
}
Assert.True 代码当结果 result 是 true 的时候,单元测试时通过的。反之, Assert.False 亦然。接着运行单元测试,可以看到是未通过的,并且提示我们期望的结果是 true 时间结果是 false
接着在单元测中,给 Programmer 的 IsPM 属性赋值 true ,然后运行单元测试,可以看到是通过的
string 类型提供的 api 相对较多,如: Assert.Equal - 等于、Assert.StartsWith - 已开头、Assert.EndsWith - 以结尾 、Assert.Contains - 包含、Assert.NotEqual - 不相等、Assert.Matches - 正则匹配等等
[Fact]
public void FullName()
{
var programmer = new Programmer();
programmer.FirstName = "Nick";
programmer.LastName = "Carter";
var fullName = programmer.FullName;
Assert.Equal("Nick Carter", fullName); //相等
Assert.StartsWith("Nick1", fullName);//以开头
Assert.EndsWith("Carter", fullName);//以结尾
Assert.Contains("Carter", fullName);//包含
Assert.Contains("Car", fullName);
Assert.NotEqual("CAR", fullName);//不相等
Assert.Matches(@"^[A-Z][a-z]*\s[A-Z][a-z]*", fullName);//正则表达式
}
数字包括 int、double 等类型,提供 Assert.Equal - 相等、Assert.InRange - 范围 等等 API
[Fact]
public void Age()
{
var programmer = new Programmer();
programmer.Age = 25;
var age = programmer.Age;
Assert.Equal(25, age); //判断是否相等
Assert.InRange(age, 24, 35);//判断是否在某一范围内
}
空可以判断值类型与引用类型、提供了 Assert.NotNull - 期望非空、Assert.Null - 期望空
[Fact]
public void Null()
{
var programmer = new Programmer();
programmer.FirstName = "Nick";
Assert.NotNull(programmer); // 期望不是空
Assert.Null(programmer.FirstName); // 期望是空
}
Assert 也支持集合,Contains 期望集合含有某个元素,DoesNotContain 期望集合不含有某个元素,如下
[Fact]
public void Languages()
{
//Arrange
var programmer = new Programmer();
//Act
programmer.Languages = new List<string>()
{
"GO",
"JAVA",
"C#"
};
Assert.Contains("JAVA", programmer.Languages); // 期望会 Java
Assert.DoesNotContain("C#", programmer.Languages); // 期望不会 C#
}
面对复杂对象 Assert 也同样支持,IsNotType 实例是否是某种类型、IsAssignableFrom 实例是否继承某种类型、NotSame 两个实例是否是同一个实例。如下
[Fact]
public void Programmer()
{
var p = new Programmer();
var p2 = new Programmer();
Assert.IsNotType<Person>(p); //期望是不是 Person 类型
Assert.IsType<Programmer>(p); //期望是 Programmer 类型
Assert.IsAssignableFrom<Person>(p); //期望对象 p 继承自 Person 类型
Assert.NotSame(p, p2); //期望不是同一个实例
Assert.Same(p, p2); //期望是同一个实例
}
测试返回类型为 bool 的方法时。 你应该: expected = true; Assert.AreEqual(expected, actual); 或 Assert.IsTrue(actual);
我最近在编写新的 NUnit 测试时尝试使用 Assert.Equals() 方法。执行此方法时会抛出一个 AssertionException ,说明Assert.Equals 不应该用于断言。 乍
在 Chai 断言库中,当我们已经有了“assert.deepEqual()”时,“assert.equal()”有什么用"和 "assert.strictEqual()"用于严格和深度相等断言?还提
有没有办法断言 puppet 中的变量(或更具体地说,事实)具有特定值,如果没有则中止安装? 对于背景,情况如下: 在大多数情况下,我可以引用主机名,但有时我需要使用 IP 地址。例如,我们的日志收集
喜欢什么: Assert.That(obj.Foo, Is.EqualTo(true)) 或 Assert.True(obj.Foo) 对我来说,这两个断言是等价的,那么应该首选哪个? 最佳答案 在这
如何在 xUnit 中找到多个断言或软断言?我发现 Nunit 有以下能力,试图在 xUnit 中找到类似的选项。 Assert.Multiple(() => { Assert.AreEqua
有什么区别: Assert.Equals和 Assert.AreEqual Assert.NotNull和 Assert.IsNotNull ... ? 最佳答案 Assert.Equals 是一个对
我想写一个像这样工作的断言函数: //the following expression outputs "assertion failed" to std::err and then terminat
有人可以指出差异吗? 以上确实是我的问题,但是如果您也可以与他们分享您的经验以及您为什么使用其中一个。 最佳答案 它们只是两个不同的库,因此只需查看功能,尤其是报告功能,然后选择即可。 因为我是 的作
我无法找到断言 1 失败但断言 2 通过的原因: var a = Test.test1; var b = Test.test1; a.Should().BeSameAs(b); //1 Assert.
我正在为每个步骤使用 NUnit 断言运行自动化 BDD 步骤,即 Then And 我的 UI 测试。 NUnit 断言仅限于每个方法。这意味着如果方法中的断言失败,则不会运行其他步骤。 我正在考虑
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我只是在寻找一些示例,说明何时适合使用 Assert.Catch 或 Assert.Throws 断言单元测试中抛出的任何异常。我知道我也可以使用 ExpectedException,但我特别想知道“
Assert.AreEqual 和 Assert.AreSame 有什么区别? 最佳答案 这意味着 AreSame() 检查它们是否是完全相同的对象 - 如果引用指示内存中的相同对象。 AreEqua
在C#中,有什么区别 Assert.AreNotEqual 和 Assert.AreNotSame 最佳答案 这里给出的几乎所有答案都是正确的,但可能值得举个例子: public static str
我曾经在 NUnit 中使用过它们,它们非常有用。知道如何做类似的事情吗? 编辑,代码示例: bool condition = false;//would be nice not to have th
关于Arrange-Act-Assert的经典测试模式,我经常发现自己在 Act 之前添加了反断言。这样我就知道传递的断言确实是作为操作的结果传递的。 我认为它类似于红绿重构中的红色,只有当我在测试过
每当我创建断言时,Eclipse 都会建议我从这两个包之一导入它。 例如,当我尝试使用 assertArrayEquals() 比较数组时Eclipse 建议从其中之一导入它 org.junit.As
每当我创建断言时,Eclipse 都会建议我从这两个包之一导入它。 例如,当我尝试使用 assertArrayEquals() 比较数组时Eclipse 建议从其中之一导入它 org.junit.As
我是一名优秀的程序员,十分优秀!