测试数组的最小起订量 class
Moq with testing an array class
我需要一种正确的方法来测试我的 classes,我对任何模拟框架都很陌生
我有下面的测试 class 我正在使用带最小起订量的 Nunit。我对如何在进行如下调用时传递 carconfigs
数组感到困惑。
[TestFixture]
public class RaceCarSetupSelectorTest
{
private CarConfiguration _carConfiguration;
private RaceCarSetupSelector _raceTrack;
private Mock<IRankCalculator> _mockRankCalcultor;
[SetUp]
public void SetUp()
{
_mockRankCalcultor = new Mock<IRankCalculator>();
_raceTrack = new RaceCarSetupSelector(_mockRankCalcultor.Object);
}
[Test]
public void RankingCarConfigurationsTest()
{
IList<CarConfiguration> carConfigs = new List<CarConfiguration>();
carConfigs.Add(FakeCarConfigs.Bentley);
carConfigs.Add(FakeCarConfigs.Jaguar);
carConfigs.Add(FakeCarConfigs.Maruti);
carConfigs.Add(FakeCarConfigs.Nissan);
carConfigs.Add(FakeCarConfigs.Porsche);
_mockRankCalcultor.Verify(x=>x.RankConfigurations(It.IsAny<RaceTrack>,It.IsAny<List<CarConfiguration>>)).
}
}
基本上我想测试 IRankCalculator
接口中定义的 RankConfiguration
方法。
我有两个实体 RaceTrack 和 CarConfiguration,我必须根据一些输入对汽车配置进行排名。我有一个 RankCalculator class,其中实际的计算方法如下所示,它派生自 IRankCalculator 接口。
public CarConfiguration[] RankConfigurations(RaceTrack raceTrack, CarConfiguration[] configs)
{
//code for calculation
return configs[];
}
我有一个名为 RaceCarSetupSelector 的不同 class,它的作用类似于调用 RankCalculator class 中的方法的服务 class。所以我为 class 'RaceCarSetupSelector ' 写了一个测试。希望这次我说清楚了。
第一件事是您不想模拟实际的 class 测试中您想要模拟它的依赖项。您需要创建实现您的 IRankCalculator 的 class 的具体实例并进行测试。
那么下一个问题是你想用那个方法测试什么?
Basically I want to test the RankConfiguration method which is defined in IRankCalculator interface.
这意味着被测系统 (SUT) 是 RankCalculator
class,您要确保它正确计算排名。但是,在您的示例代码中,您没有使用 RankCalculator
,您使用的是 IRankCalculator
的模拟。要测试 RankCalulator
你会做类似
// Arrange
var raceTrack = new FakeRaceTrack();
var carConfigs = new List<CarConfiguration> {FakeCarConfigs.Bentley, FakeCarConfigs.Jaguar, ...};
var rankCalculator = new RankCalculator(); // SUT
// Act
var ranks = rankCalculator.RankConfigurations(raceTrack, carConfigs);
// Assert
Assert.That(ranks.First(), Is.EqualTo(FakeCarConfigs.Jaguar));
看起来您正在尝试测试 RaceCarSetupSelector
class 以确保它在某个时刻调用 IRankCalculator
上的 RankConfiguration()
(行为验证)。您快完成了,但您的测试似乎缺少您尝试测试的实际方法调用。我想它应该看起来像
// Arrange
var raceTrack = new FakeRaceTrack();
var carConfigs = new List<CarConfiguration> {FakeCarConfigs.Bentley, FakeCarConfigs.Jaguar, ...};
var mockRankCalcultor = new Mock<IRankCalculator>();
var setupSelector = new RaceCarSetupSelector(mockRankCalcultor.Object); // SUT
// Act
setupSelector.DoSomething(raceTrack, carConfigs);
// Assert
mockRankCalcultor.Verify(x => x.RankConfigurations(raceTrack, carConfigs);
我需要一种正确的方法来测试我的 classes,我对任何模拟框架都很陌生
我有下面的测试 class 我正在使用带最小起订量的 Nunit。我对如何在进行如下调用时传递 carconfigs
数组感到困惑。
[TestFixture]
public class RaceCarSetupSelectorTest
{
private CarConfiguration _carConfiguration;
private RaceCarSetupSelector _raceTrack;
private Mock<IRankCalculator> _mockRankCalcultor;
[SetUp]
public void SetUp()
{
_mockRankCalcultor = new Mock<IRankCalculator>();
_raceTrack = new RaceCarSetupSelector(_mockRankCalcultor.Object);
}
[Test]
public void RankingCarConfigurationsTest()
{
IList<CarConfiguration> carConfigs = new List<CarConfiguration>();
carConfigs.Add(FakeCarConfigs.Bentley);
carConfigs.Add(FakeCarConfigs.Jaguar);
carConfigs.Add(FakeCarConfigs.Maruti);
carConfigs.Add(FakeCarConfigs.Nissan);
carConfigs.Add(FakeCarConfigs.Porsche);
_mockRankCalcultor.Verify(x=>x.RankConfigurations(It.IsAny<RaceTrack>,It.IsAny<List<CarConfiguration>>)).
}
}
基本上我想测试 IRankCalculator
接口中定义的 RankConfiguration
方法。
我有两个实体 RaceTrack 和 CarConfiguration,我必须根据一些输入对汽车配置进行排名。我有一个 RankCalculator class,其中实际的计算方法如下所示,它派生自 IRankCalculator 接口。
public CarConfiguration[] RankConfigurations(RaceTrack raceTrack, CarConfiguration[] configs)
{
//code for calculation
return configs[];
}
我有一个名为 RaceCarSetupSelector 的不同 class,它的作用类似于调用 RankCalculator class 中的方法的服务 class。所以我为 class 'RaceCarSetupSelector ' 写了一个测试。希望这次我说清楚了。
第一件事是您不想模拟实际的 class 测试中您想要模拟它的依赖项。您需要创建实现您的 IRankCalculator 的 class 的具体实例并进行测试。
那么下一个问题是你想用那个方法测试什么?
Basically I want to test the RankConfiguration method which is defined in IRankCalculator interface.
这意味着被测系统 (SUT) 是 RankCalculator
class,您要确保它正确计算排名。但是,在您的示例代码中,您没有使用 RankCalculator
,您使用的是 IRankCalculator
的模拟。要测试 RankCalulator
你会做类似
// Arrange
var raceTrack = new FakeRaceTrack();
var carConfigs = new List<CarConfiguration> {FakeCarConfigs.Bentley, FakeCarConfigs.Jaguar, ...};
var rankCalculator = new RankCalculator(); // SUT
// Act
var ranks = rankCalculator.RankConfigurations(raceTrack, carConfigs);
// Assert
Assert.That(ranks.First(), Is.EqualTo(FakeCarConfigs.Jaguar));
看起来您正在尝试测试 RaceCarSetupSelector
class 以确保它在某个时刻调用 IRankCalculator
上的 RankConfiguration()
(行为验证)。您快完成了,但您的测试似乎缺少您尝试测试的实际方法调用。我想它应该看起来像
// Arrange
var raceTrack = new FakeRaceTrack();
var carConfigs = new List<CarConfiguration> {FakeCarConfigs.Bentley, FakeCarConfigs.Jaguar, ...};
var mockRankCalcultor = new Mock<IRankCalculator>();
var setupSelector = new RaceCarSetupSelector(mockRankCalcultor.Object); // SUT
// Act
setupSelector.DoSomething(raceTrack, carConfigs);
// Assert
mockRankCalcultor.Verify(x => x.RankConfigurations(raceTrack, carConfigs);