【发布时间】:2016-09-21 18:44:56
【问题描述】:
我正在测试一个类的方法。但是,其中一些具有执行无关内容的属性,这会使测试失败。
例如,我有这个类(在VB.net,但也可以是C#)
<AttributeOne()>
<AttributeTwo(Arg1, Arg2)>
Public Overridable Function SomeMethod() As Object
' Stuff
End Function
当我从我的模拟对象调用SomeMethod 时,它会引发一些异常,因为属性会尝试做一些在单元测试上下文中不可能的事情。
[TestFixture]
public class SomeClassUnitTests
{
[Test]
public void TestSomeMethod()
{
var someClassMock = new Mock<SomeClass>() { CallBase = true };
//Exception is thrown
var result = someClassMock.Object.SomeMethod();
}
}
测试用C# 编写。我正在使用Moq 和Nunit
如何在单元测试时忽略这些属性?
【问题讨论】:
-
如果是这种情况,您就违反了单一责任原则。当您应该解决原因时,您正在尝试治疗症状。
-
@HimBromBeere 我正在测试
SomeMethod,并且此方法具有一些评估全局安全信息的属性(例如用户是否已登录等)。但是,在单元测试中没有这样的信息,所以测试失败,我无法测试方法,明白了吗? -
@DavidL 你能详细说明一下吗?
-
@RafaelCardoso 您不能忽略属性,但似乎您可以更改属性值Remove C# attribute of a property dynamically,也许您可以将值更改为允许您编写单元测试的值。
-
你为什么要创建一个
SomeClass的 Mock,然后在该 mock 上调用一个方法来测试该方法?只有当您想将其作为依赖项提供给某个 other 类时,您才应该 MockingSomeClass,因为您正在测试 other 类并希望控制测试期间的依赖关系。在这种情况下,这些属性甚至不会发挥作用,因为 MockedSomeClass实际上并不是真正的 SomeClass。你能发布你得到的例外吗?
标签: c# .net vb.net unit-testing moq