C# 如何验证使用Moq调用的方法?
我试图验证调用C# 如何验证使用Moq调用的方法?,c#,moq,C#,Moq,我试图验证调用GetFirefoxDriver()时是否调用了SetFirefoxOptions()。但不管出于什么原因,莫克一直告诉我它没有被叫来。我做错了什么 这是我的测试: [TestMethod] public void ShouldSetFirefoxOptions() { var stubCapabilities = new Mock<SauceCaps>().Object; var mockManager = new Mock<DriverMana
GetFirefoxDriver()
时是否调用了SetFirefoxOptions()
。但不管出于什么原因,莫克一直告诉我它没有被叫来。我做错了什么
这是我的测试:
[TestMethod]
public void ShouldSetFirefoxOptions()
{
var stubCapabilities = new Mock<SauceCaps>().Object;
var mockManager = new Mock<DriverManager>();
mockManager.Setup(
m => m.GetFirefoxDriver(stubCapabilities)).
Returns(It.IsAny<IWebDriver>());
mockManager.Verify(
m => m.SetFirefoxOptions(stubCapabilities));
}
[TestMethod]
public void应设置FirefoxOptions()
{
var stubCapabilities=new Mock().Object;
var mockManager=new Mock();
mockManager.Setup(
m=>m.GetFirefoxDriver(stubCapabilities))。
返回(It.IsAny());
mockManager。验证(
m=>m.SetFirefoxOptions(stubCapabilities));
}
DriverManager.cs:
public class DriverManager : IDriverManager
{
public virtual Dictionary<string, object> SauceOptions { get; private set; }
public DriverManager()
{
}
public virtual IWebDriver GetFirefoxDriver(SauceCaps sauceCaps)
{
var browserOptions = SetFirefoxOptions(sauceCaps);
return new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"),
browserOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
}
public virtual FirefoxOptions SetFirefoxOptions(SauceCaps sauceCaps)
{
return new FirefoxOptions
{
BrowserVersion = sauceCaps.BrowserVersion,
PlatformName = sauceCaps.Os
};
}
}
公共类驱动程序管理器:IDriverManager
{
公共虚拟字典SauceOptions{get;private set;}
公共驱动器管理器()
{
}
公共虚拟IWebDriver GetFirefoxDriver(SauceCaps SauceCaps)
{
var browserOptions=SetFirefoxOptions(sauceCaps);
返回新的RemoteWebDriver(新Uri(“https://ondemand.saucelabs.com/wd/hub"),
browserOptions.ToCapabilities(),TimeSpan.FromSeconds(600));
}
公共虚拟FirefoxOptions设置FirefoxOptions(SauceCaps SauceCaps)
{
返回新的FirefoxOptions
{
BrowserVersion=sauceCaps.BrowserVersion,
PlatformName=sauceCaps.Os
};
}
}
您的代码的问题是不清楚您的系统在测试什么。您正在同时模拟和测试同一个类。虽然在技术上可以使用moq
(使用CallBase),但原则上这是错误的方法
一种可能性是将SetFirefoxOptions
提取到单独的接口
中,并将其注入驱动管理器
,例如
public interface IFirefoxOptionCreator
{
FirefoxOptions SetFirefoxOptions(SauceCaps sauceCaps);
}
public DeviceManager(IFirefoxOptionCreator optionCreator)
{
_optionCreator = optionCreator;
}
public virtual IWebDriver GetFirefoxDriver(SauceCaps sauceCaps)
{
var browserOptions = _optionCreator.SetFirefoxOptions(sauceCaps);
return new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"),
browserOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
}
然后,您可以轻松验证在单元测试中调用了is接口方法:
[TestMethod]
public void ShouldSetFirefoxOptions()
{
// Arrange
var stubCapabilities = new Mock<SauceCaps>().Object;
var optionCreatorMock = new Mock<IFirefoxOptionCreator>();
optionCreatorMock.Setup(m => m.SetFirefoxOptions(It.IsAny<SauceCaps>()))
.Returns(new FirefoxOptions());
var sut = new DriverManager();
// Act
_ = sut.GetFirefoxDriver(stubCapabilities);
// Assert
optionCreatorMock.Verify(m => m.SetFirefoxOptions(stubCapabilities));
}
[TestMethod]
public void应设置FirefoxOptions()
{
//安排
var stubCapabilities=new Mock().Object;
var optionCreatorMock=new Mock();
optionCreatorMock.Setup(m=>m.SetFirefoxOptions(It.IsAny()))
.返回(新的FirefoxOptions());
var sut=new DriverManager();
//表演
_=sut.GetFirefoxDriver(stubCapabilities);
//断言
optionCreatorMock.Verify(m=>m.SetFirefoxOptions(stubCapabilities));
}
您的代码的问题是不清楚您的系统在测试什么。您正在同时模拟和测试同一个类。虽然在技术上可以使用moq
(使用CallBase),但原则上这是错误的方法
一种可能性是将SetFirefoxOptions
提取到单独的接口
中,并将其注入驱动管理器
,例如
public interface IFirefoxOptionCreator
{
FirefoxOptions SetFirefoxOptions(SauceCaps sauceCaps);
}
public DeviceManager(IFirefoxOptionCreator optionCreator)
{
_optionCreator = optionCreator;
}
public virtual IWebDriver GetFirefoxDriver(SauceCaps sauceCaps)
{
var browserOptions = _optionCreator.SetFirefoxOptions(sauceCaps);
return new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"),
browserOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
}
然后,您可以轻松验证在单元测试中调用了is接口方法:
[TestMethod]
public void ShouldSetFirefoxOptions()
{
// Arrange
var stubCapabilities = new Mock<SauceCaps>().Object;
var optionCreatorMock = new Mock<IFirefoxOptionCreator>();
optionCreatorMock.Setup(m => m.SetFirefoxOptions(It.IsAny<SauceCaps>()))
.Returns(new FirefoxOptions());
var sut = new DriverManager();
// Act
_ = sut.GetFirefoxDriver(stubCapabilities);
// Assert
optionCreatorMock.Verify(m => m.SetFirefoxOptions(stubCapabilities));
}
[TestMethod]
public void应设置FirefoxOptions()
{
//安排
var stubCapabilities=new Mock().Object;
var optionCreatorMock=new Mock();
optionCreatorMock.Setup(m=>m.SetFirefoxOptions(It.IsAny()))
.返回(新的FirefoxOptions());
var sut=new DriverManager();
//表演
_=sut.GetFirefoxDriver(stubCapabilities);
//断言
optionCreatorMock.Verify(m=>m.SetFirefoxOptions(stubCapabilities));
}
你所说的“真正的”GetFirefoxDriver是什么意思?调试你的测试,在var browserviceOptions=SetFirefoxOptions(sauceCaps)上设置一个断点;并验证它是否停止。检查,您需要测试您的代码。你决定嘲笑它。现在您有两个问题,您所说的“真正的”GetFirefoxDriver是什么意思?调试您的测试,在var browserviceOptions=SetFirefoxOptions(sauceCaps)上放置一个断点;并验证它是否停止。检查,您需要测试您的代码。你决定嘲笑它。现在你有两个问题