在学会如何Mock介面後,接下来处理的问题就是复杂的类别要怎麽来验证,当然可以透过JSON的序列化及反序列化来验证结果对不对,但是如果关注的点是只有特殊的几个属性呢,所以今天介绍ExpectedObjects来使得验证结果不是一件难事。
「前辈,我要如何处理复杂型别的验证阿。」
在了解BDD之後并开始写测试案例以及处理模拟资料後小光又遇上一个问题,就是复杂型别的验证。
「恩我遇到的问题试不知道该如何验证返还资料试阵列的方法。」
听到大头这麽说,小光做动作示意是不是该去找老K了解一下这部分有甚麽方法可以处理,这时大头也点点头,但是在这同时老K也从远方走了过来。
「我在想阿,你们是不是应该遇到该如何处理验证的动作了阿。」
这时大头跟小光互看一眼并且对着彼此笑了起来。
「那我们就从基础开始介绍如何处理验证资料吧。」
首先介绍的是,Microsoft.VisualStudio.TestTools.UnitTesting
中的Assert
,这是最基本的验证工具可以做一些简单的验证。其验证的方法如下。
var actual = _current.Get<int>("Result");
Assert.AreEqual(expected, actual);
基本上可以透过这个来做简单的验证,而且只能验证基础型别,所以我们继续往下看,不过想要了解有哪些方法可以用可以参考C#,又来找你玩了! - MSTest 的 Assert 提供了哪些 method?。
原则上基础的型别我们透过Assert可以验证,所以接下来我们来处理类别class
的验证,这边我们使用specflow的元件来验证,首先我们可以在feature内这样写。
Then the result should be
| Name | Age |
| 大头 | 20 |
然後要处理这类强行别的验证则使用下列语法。
[Then("the result should be")]
public void ThenTheResultShouldBe(Table expect)
{
var actual = _scenarioContext.Get<UserInfo>("Result");
expect.CompareToInstance(actual);
}
如果说今天要验证的资料是阵列的话,我们的测试案例调整如下。
Then the result should be
| Name | Age |
| 大头 | 20 |
| 小光 | 15 |
| 老K | 40 |
然後要处理验证则使用下列语法。
[Then("the result should be")]
public void ThenTheResultShouldBe(Table expect)
{
var actual = _scenarioContext.Get<UserInfo>("Result");
expect.CompareToSet(actual);
}
所以针对强行别的验证就是在feature传入Table,然後在程序码里面用CompareToInstance
或是CompareToSet
来验证。不过这边的物件是会比较所有的变数,如果只针对物件的特定变数则要使用下面的套件。
接下来要介绍这个套件可以更进一步验证物件的某些属性,所以首先先安装该套件进来。
dotnet add package ExpectedObjects
接下来延续上述的例子,我们可以将程序码改成下列内容。
[Then("the result should be")]
public void ThenTheResultShouldBe(Table expect)
{
var actual = _scenarioContext.Get<UserInfo>("Result");
expect.CreateInstance<UserInfo>().ToExpectedObject().ShouldEqual(actual);
}
如此就算是某属性错误时错误讯息也会特别说明是哪个属性不同,当然他也可以用在阵列上,如下所示。
[Then("the result should be")]
public void ThenTheResultShouldBe(Table expect)
{
var actual = _scenarioContext.Get<UserInfo>("Result");
expect.CreateSet<UserInfo>().ToExpectedObject().ShouldEqual(actual);
}
当然他的功用并不只这样,他还可以使用ShouldMatch
方法针对部分属性做验证,或者是忽略某些特定属性,如下所示。
[Then("the result should be")]
public void ThenTheResultShouldBe(Table expect)
{
var actual = _scenarioContext.Get<UserInfo>("Result");
expect.CreateSet<UserInfo>().ToExpectedObject(ctx => ctx.Ignore(x => x.Name)).ShouldEqual(actual);
}
今天跟着大头还有小光学习到如何处理在BDD中的最後一个步骤,也就是如何验证预期与实际是否相符,并且了解在Specflow中检查强行别的类别资料是否正确,最後使用ExpectedObjects来针对部分属性做验证。
<<: [Day 28] - React 前端串後端 - Donate!
tags: Vue.js ItIron2020 前言 终於进到最终的三天了,坦白说做为一个教学的系列...
表单输入绑定 我们可以用v-model指令在表单<input>、<textarea...
谈完「人」之後,我们来谈另一个跟人很高度相关的题目:文化。 我大学时,曾经在一家加拿大的新创实习。...
GOOGLE登入 第一步:在firebase添加一个新的专案 第二步:选取android专案 第三步...
好了,开始做side project了,但是要做什麽呢? 相信这是大多数人的问题 做 side pr...