所以我被要求测试这个构造函数调用。
public class testClass
{
private bool keyValue = 45;
public testClass()
{
MethodOne();
keyValue = 900;
MethodTwo();
MethodThree();
keyValue = 221;
}
}
在上面的代码中,keyValue(全局字段)不断被设置。 这些方法在每个决策算法中使用keyValue。 我想声明keyValue设置为此值。
使用
可以获取字段的当前值Isolate.whenCalled(() => obj.MethodOne())
.DoInstead(context =>
{
testClass object = (testClass)context.Instance;
// from here on, get any fields
});
我发现上面的代码只能在除构造函数之外的任何地方完成。(如果我错了,请纠正我)
另一点是我只能在使用MockManager API运行构造函数之前模拟方法。
[Test]
public void testMethod()
{
Mock mockObj = MockManager.Mock(typeof(testClass));
mockObj.ExpectCall("MethodOne");
//instantiate tested object
testClass testedObj = new testClass();
}
虽然上面的代码断言在构造函数中调用了MethodOne(), 我无法改变其行为来检查字段。
任何启发/帮助都会有所帮助。谢谢。
答案 0 :(得分:0)
如果我理解正确的话:
我想声明keyValue设置为此值
相关测试将是:
[TestMethod]
public void TestMethod1()
{
// Fake the object, Ignore calls, Invoke original ctor
testClass tc = Isolate.Fake.Instance<testClass>(Members.ReturnNulls, ConstructorWillBe.Called);
// Create a getter for keyValue and call it's original implementation
Isolate.WhenCalled(() => tc.KeyVal).CallOriginal();
// Assert that by the end of the ctor keyValue is equal to 221
Assert.AreEqual(221, tc.KeyVal);
}
这是你的想法吗?