【发布时间】:2016-09-26 07:51:56
【问题描述】:
我使用的是最小起订量 4.5.3。并决定将 Moq Nuget 包更新到最新版本,即 4.5.8。
突然,我的很多测试开始失败。问题在于在可选参数上使用 It.IsAny<decimal> 时。
Bellow 是一个简单而愚蠢的测试来证明它:
public interface IFoo { bool Method(decimal decimalArg = 0m); }
public class Some
{
public int SomeMethod(IFoo foo) => foo.Method(10m) ? 1 : 0;
}
[TestFixture]
public class SomeTests
{
[Test]
public void SampleTest()
{
var fooMock = new Mock<IFoo>();
fooMock.Setup(m => m.Method(It.IsAny<decimal>())).Returns(true);
var sut = new Some();
var actual = sut.SomeMethod(fooMock.Object);
Assert.That(actual, Is.EqualTo(1));
}
}
我正在使用 .Net 4.6.1,nUnit 3.2.1。
返回的异常是:“system.decimal 不是受支持的常量类型”。
- 有人对此问题有解释吗?
- 是否有任何修复或解决方法?
【问题讨论】:
-
这真的足以重现问题吗?这听起来像是一个在“发布”新版本之前很容易发现的问题。
m.Create方法是否以明显的方式声明(如在public IAccount Create(ITransactionalEntity x, decimal y)中)还是涉及一些隐式类型转换? -
感谢您的回复,杰普。我刚刚发现是什么导致了这个问题。十进制参数是一个可选参数:
IAccount Create(ITransactionalEntity owner, decimal initialBalance = 0m);。这里的主要问题是起订量发生了一些重大变化,因为这适用于起订量 4.5.3。 -
您应该编辑您的问题以包含这些新信息。也许展示
IAccountFactory介绍Create的部分。是否存在多个重载(包括可能的继承重载)? -
好的,我已经编辑了问题。我想现在它已经具备了重现问题所需的一切。
-
公关会更好;)
标签: c# unit-testing moq