2016-02-29 3 views
1

мне нужен правильный способ проверить один из моих классов, я совсем новичок в какие-то рамки, насмехаясь my project structure looks like thisMoq с тестирует класс массива

У меня есть ниже класс Test я использую NUnit с Moq. Я смущаюсь относительно того, как я должен передать массив 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>>)). 

     } 
    } 

В основном я хочу, чтобы проверить RankConfiguration метод, который определен в IRankCalculator интерфейсе.

У меня есть два объекта RaceTrack и CarConfiguration, и я должен оценивать конфигурацию автомобиля на основе некоторого ввода. У меня есть класс RankCalculator, в котором существует фактический метод вычисления, который ниже, чем результат интерфейса IRankCalculator.

public CarConfiguration[] RankConfigurations(RaceTrack raceTrack, CarConfiguration[] configs) 
     { 
     //code for calculation 

      return configs[]; 

     } 

У меня есть другой класс под названием RaceCarSetupSelector, который действует как класс обслуживания, который вызывает метод в классе RankCalculator. Поэтому я написал тест для класса «RaceCarSetupSelector». Надеюсь, на этот раз я ясно.

+0

Что именно вы хотите проверить? Какой метод? Каково ожидаемое поведение/выход? –

+0

Вы все еще издеваетесь над фактическим классом, который вы пытаетесь протестировать (IRankCalculator). Этот класс не следует издеваться, только его зависимости. – andreasnico

+0

Я не понял ваш комментарий. Не могли бы вы немного объяснить. –

ответ

1

В принципе, я хочу протестировать метод RankConfiguration, который определен в интерфейсе IRankCalculator.

Это означает, что тестируемая система (SUT) является RankCalculator класс, и вы хотите, чтобы убедиться, что он рассчитывает ряды правильно. В вашем примере кода, однако, вы не используете 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 класс, чтобы убедиться, что в какой-то момент он вызывает RankConfiguration() на IRankCalculator (поведение проверки). Вы почти там, но ваш тест, кажется, не содержит фактического вызова метода, который вы пытаетесь проверить. Я бы предположил, что это должно выглядеть примерно так:

// 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); 
+0

Спасибо, Мэтт, это мне очень помогло :) –

1

Прежде всего, вы не хотите издеваться над фактическим тестируемым классом, который вы хотите издеваться над его зависимостями. Вам нужно создать конкретный экземпляр класса, который реализует ваш IRankCalculator, и попытаться проверить его.

Тогда следующий вопрос: что вы хотите проверить на этом методе?

Смежные вопросы