我正在尝试在我的项目中模拟静态函数。我无法使用Rhynomocks这样做,因此尝试使用Typemock模拟静态函数。
他们说使用typemock模拟静态函数是可能的,下面的文章中提供了相同的例子
http://www.typemock.com/basic-typemock-unit-testing
然而它似乎对我不起作用。以下是我的代码:
公共类Class1Test
{
[Isolated(Design = DesignMode.Pragmatic)]
[测试]
public void function()
{ Isolate.Fake.StaticMethods(Members.MustSpecifyReturnValues);Isolate.WhenCalled(() => LoggerFactory.Add(6, 4)).WillReturn(11); int value = LoggerFactory.Add(5, 6); } }
----------------------------------------------- LoggerFactory.cs
公共类LoggerFactory {
public static int Add(int intx, int inty)
{
return intx + inty;
}
}
我得到的错误是:
* 在InterfaceOnly设计模式下,无法伪造非虚方法。使用[Isolated(DesignMode.Pragmatic)]伪造这个。点击此处了解详情http://www.typemock.com/isolator-design-mode
提前致谢。
答案 0 :(得分:1)
你为什么要先尝试模拟?你的方法不需要嘲笑,因为它是无状态的 - 只需直接测试它:
[Test]
public void Six_Plus_Five_Is_Eleven()
{
Assert.That(11, Is.EqualTo(LoggerFactory.Add(6, 5));
}
答案 1 :(得分:0)
您的示例代码看起来不完整。我只是使用你的代码将一个略微修改的复制放在一起,它工作正常。具体而言,Isolate.Fake.StaticMethods
调用缺少您打算进行模拟的类型。
using System;
using NUnit.Framework;
using TypeMock.ArrangeActAssert;
namespace TypeMockDemo
{
public class LoggerFactory
{
public static int Add(int intx, int inty)
{
return intx + inty;
}
}
// The question was missing the TestFixtureAttribute.
[TestFixture]
public class LoggerFactoryFixture
{
// You don't have to specify DesignMode.Pragmatic - that's the default.
[Isolated(Design = DesignMode.Pragmatic)]
[Test]
public void Add_CanMockReturnValue()
{
// The LoggerFactory type needs to be specified here. This appeared
// missing in the example from the question.
Isolate.Fake.StaticMethods<LoggerFactory>(Members.MustSpecifyReturnValues);
// The parameters in the Add call here are totally ignored.
// It's best to put "dummy" values unless you are using
// WithExactArguments.
Isolate.WhenCalled(() => LoggerFactory.Add(0, 0)).WillReturn(11);
// Note the parameters here. No WAY they add up to 11. That way
// we know you're really getting the mock value.
int value = LoggerFactory.Add(100, 200);
// This will pass.
Assert.AreEqual(11, value);
}
}
}
如果您可以将该代码粘贴到项目中(使用Typemock和NUnit引用)并且它不起作用,那么您可能在执行测试时遇到麻烦,或者您的计算机上可能存在配置错误。在任何一种情况下,如果上述代码不起作用,您可能希望联系Typemock支持。