What steps will reproduce the problem?
Sample code is like this, TestArrayVerify fails.
public interface ITest
{
void TestVerifyArray(Array a);
void TestVerifyInt(int i);
}
internal class MyTest : ITest
{
public void TestVerifyArray(Array a)
{
}
public void TestVerifyInt(int i)
{
}
}
internal class Test2
{
private ITest myTest;
public Test2(ITest myTest)
{
this.myTest = myTest;
}
public void CallTestVerifyArray(bool b)
{
Array valueArray = new object[1];
valueArray.SetValue(null, 0);
myTest.TestVerifyArray(valueArray);
if (b)
{
valueArray.SetValue("No", 0);
myTest.TestVerifyArray(valueArray);
}
}
public void CallTestVerifyInt(bool b)
{
int i = 0;
myTest.TestVerifyInt(i);
if (b)
{
i = 1;
myTest.TestVerifyInt(i);
}
}
}
/// <summary>
/// Summary description for UnitTest1
/// </summary>
[TestClass]
public class UnitTest1
{
public UnitTest1()
{
}
private TestContext testContextInstance;
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
[TestMethod]
public void TestArrayVerify()
{
Mock<ITest> mock = new Mock<ITest>();
Test2 test = new Test2(mock.Object);
Array valueArray = new object[1];
valueArray.SetValue(null, 0);
test.CallTestVerifyArray(true);
mock.Verify(fw => fw.TestVerify(valueArray));
valueArray.SetValue("No", 0);
mock.Verify(fw => fw.TestVerify(valueArray),Times.Once());
}
[TestMethod]
public void TestIntVerify()
{
Mock<ITest> mock = new Mock<ITest>();
Test2 test = new Test2(mock.Object);
int i = 0;
test.CallTestVerifyInt(true);
mock.Verify(fw => fw.TestVerifyInt(i));
i = 1;
mock.Verify(fw => fw.TestVerifyInt(i));
}
}
What is the expected output? What do you see instead?
I hope the first test (TestArrayVerify) can be passed but it failed at the
first verification, because the TestVerifyArray is called twice in code, and
seems the array hold by moq is overwritten with last value. so when it verify
the value set previously, there is no match calls. I mean i can only get the
second verify passed. But if the parameter is basic type such as int. the test
(TestIntVerify) will be passed without any problem. I think this is a bug. or
do i misuse moq?
What version of the product are you using? On what operating system?
4.0.10827.0
Please provide any additional information below.
Original issue reported on code.google.com by yuzi801...@gmail.com on 27 Jul 2012 at 8:48
Original issue reported on code.google.com by
yuzi801...@gmail.com
on 27 Jul 2012 at 8:48