gpt4 book ai didi

c# - 使用不同的值调用方法两次使用最小起订量进行单元测试

转载 作者:太空狗 更新时间:2023-10-29 23:01:02 26 4
gpt4 key购买 nike

我想测试一个构造,它调用其中的一个方法两次以获得两个不同的值

public class  stubhandler
{

public stubhandler()
{

string codetext = model.getValueByCode(int a,string b); // 1,"High" result Canada
string datatext = model.getValueByCode(int a,string b); // 10, "Slow" result Motion

}

}

为了测试上面的内容,我使用了一个单元测试类

[TestMethod]
public void StubHandlerConstructor_Test()
{
Mock<Model> objMock = new Mock<>(Model);
objMock.Setup(m => m.getValueByCode(It.IsAny<int>,It.IsAny<string>)).Returns("Canada");

objMock.Setup(m => m.getValueByCode(It.IsAny<int>,It.IsAny<string>)).Returns("Motion");

stubhandler classstubhandler = new stubhandler();

}

上述方法通过但codetext和datatext包含相同的值Motion我希望他们设置为

codetext = Canada
datatext = Motion

我怎样才能做到这一点?

我已经尝试过 objMock.VerifyAll() 但未通过测试 ??

最佳答案

如果使用 MOQ 4,可以使用 SetupSequence,否则可以使用 lambda 来完成

使用 SetupSequence 是非常 self 解释的。

使用 lambda 并不太麻烦。重要的一点是返回值是在声明设置时设置的。如果刚用过

mockFoo.Setup(mk => mk.Bar()).Returns(pieces[pieceIdx++]);

设置总是会返回 pieces[0]。通过使用 lambda,评估被推迟到 Bar() 被调用。

public interface IFoo {
string Bar();
}

public class Snafu {

private IFoo _foo;
public Snafu(IFoo foo) {
_foo = foo;
}

public string GetGreeting() {
return string.Format("{0} {1}",
_foo.Bar(),
_foo.Bar());
}

}

[TestMethod]
public void UsingSequences() {

var mockFoo = new Mock<IFoo>();
mockFoo.SetupSequence(mk => mk.Bar()).Returns("Hello").Returns("World");

var snafu = new Snafu(mockFoo.Object);

Assert.AreEqual("Hello World", snafu.GetGreeting());

}

[TestMethod]
public void NotUsingSequences() {

var pieces = new[] {
"Hello",
"World"
};
var pieceIdx = 0;

var mockFoo = new Mock<IFoo>();
mockFoo.Setup(mk => mk.Bar()).Returns(()=>pieces[pieceIdx++]);

var snafu = new Snafu(mockFoo.Object);

Assert.AreEqual("Hello World", snafu.GetGreeting());

}

关于c# - 使用不同的值调用方法两次使用最小起订量进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12599728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com