考虑这个课程:
public class Content
{
public virtual bool IsCheckedOut {get; private set;}
public virtual void CheckOut()
{
IsCheckedOut = true;
}
public virtual void CheckIn()
{
//Do Nothing for now as demonstrating false positive test.
}
}
Run Code Online (Sandbox Code Playgroud)
Checkin方法故意为空.现在我有一些测试方法来验证调用每个方法的状态.
[TestMethod]
public void CheckOutSetsCheckedOutStatusToTrue()
{
Content c = new Content();
c.CheckOut();
Assert.AreEqual(true, c.IsCheckedOut); //Test works as expected
}
[TestMethod]
public void CheckInSetsCheckedOutStatusToFalse()
{
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //Test does not work as expected
}
Run Code Online (Sandbox Code Playgroud)
第二次测试通过了错误的原因.那么我如何使用mocking(moq)来验证CheckIn是否设置了IsCheckedOut属性?
谢谢.
编辑
澄清一下:我有一个名为CheckIn()的方法,其工作是将IsCheckedOut状态设置为false.
您将在上面的测试代码中看到,即使我没有将属性值设置为false,Test也将返回false; 这是预期的,这里没有错.
我认为我的问题具体是如何验证CheckIn()方法是否将IsCheckedOut属性设置为false?这就是我所说的行为验证.
我相信一些意见建议做一些相当于国家核查的事情?如果是这样的话,我不相信当我们可以简单地使用时,嘲笑这部分是没有任何价值的:
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //State verification
Run Code Online (Sandbox Code Playgroud)
当然我可能错了,所以请帮我澄清这些概念:)
Kon*_*man 43
以下应该有效.将模拟对象配置为:
var mock=new Mock<IContent>();
mock.SetupSet(content => content.IsCheckedOut=It.IsAny<bool>()).Verifiable();
Run Code Online (Sandbox Code Playgroud)
并在测试代码之后:
mock.VerifySet(content => content.IsCheckedOut=It.IsAny<bool>());
Run Code Online (Sandbox Code Playgroud)
我还没有测试过,所以请告诉我它是否适合你.
编辑.实际上,这不会起作用,因为setter IsCheckedOut
是假的.
无论如何,现在我看到你从未设定IsCheckedOut
上课时间的价值.将以下内容添加到Content
类中是个好主意:
public Content()
{
IsCheckedOut=false;
}
Run Code Online (Sandbox Code Playgroud)
小智 19
Mock mockContect = new Mock<Cotent>();
mockContent.VerifySet(x => x.IsCheckedOut, Times.Once());
Run Code Online (Sandbox Code Playgroud)
这会诀窍吗?不知道私人制定者是如何进行游戏的.但适合我的公共制定者.
得到的信息来自:http://www.codethinked.com/post/2009/03/10/Beginning-Mocking-With-Moq-3-Part-2.aspx
为什么不简单地设置要检出的内容开始呢?请记住,您只是在测试 CheckIn 函数的行为。
[TestMethod]
public void CheckInSetsCheckedOutStatusToFalse()
{
// arrange - create a checked out item
Content c = new Content();
c.CheckOut();
// act - check it in
c.CheckIn();
// assert - IsCheckedOut should be set back to false
Assert.AreEqual(false, c.IsCheckedOut);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32945 次 |
最近记录: |