2014-01-20 1 views
1
interface ITaxi 
{ 
    int Fare { get; set; } 
    int getTotalFare();   
} 


class Taxi : Car, ITaxi 
{ 

    public Taxi(Engine e) : base (e){ }   

    public int Fare { get; set; } 
    public int getTotalFare() 
    { 
     return 0; 
    } 
} 


[TestFixture] 
class TestTaxi 
{ 
    [Test] 
    public void TestTaxiFare() 
    { 
     MockRepository mockRepo = new MockRepository(); 
     ITaxi taxi = mockRepo.Stub<ITaxi>(); 
     using (mockRepo.Record()) 
     { 
      SetupResult.For(taxi.getTotalFare()).Return(400); 
     } 
     Assert.AreEqual(400, taxi.getTotalFare()); 
    } 
} 

Я новичок в тестировании. Я попытался высмеять класс и setuo значение для метода. но яОшибка в Mocking в C# Настройка для возврата Значение функции

message castle.dynamicProxy.generators.generatorexception Type is not public, so a proxy cannot be generated. type: UnitTest.ITaxi 
  1. ли я пропустить что-нибудь в коде?

  2. В чем разница между заглушкой и mock? [читал ссылки не понял]?

+0

Штук - это класс, который просто соответствует его контракту - то есть он вернет правильные значения типа, но это все. Макет - это класс, который «высмеивается» для выполнения некоторой функции и возвращает определенные значения. –

+0

[Знай свои двойные испытания] (http://googletesting.blogspot.co.uk/2013/07/testing-on-toilet-know-your-test-doubles.html) –

ответ

0

Как уже упоминалось, вам нужно объявить интерфейс как общедоступный.

Разница между макетом и заглушкой довольно тонкая (из моего понимания книги Art of Unit Testing Роя Ошерова).

  • Заглушка - это то, что помогает в тестировании, но никогда не может пропустить тест, поскольку фактическое испытание подтверждается против теста класса.
  • Макет может пропустить тест, поскольку это утверждение выполняется против этого объекта.

Чтобы, возможно, пояснить, что заглушка представляет собой законченный отклик (поддельный объект), который помогает выполнить это утверждение позже (то есть он может быть параметром для тестируемого метода). Вы никогда не утверждали бы, что заглушка проходит или не проходит тест, поскольку это объект, который вы сконфигурировали, чтобы помочь в тестировании чего-то еще.

Отказ от чужих ожиданий установлен, например, если я настрою этот объект с набором параметров что я ожидаю? Изменит ли это внутреннее состояние (как я ожидаю), или оно вызывает исключение (что я ожидаю). Это утверждение, которое вы хотите проверить.

В более сложных тестах у вас может быть много заглушек, но вы должны стремиться иметь только один макет.

+0

все еще я не понял. – Dineshkumar

+0

@ Dineshkumar Я добавил немного больше информации, помогает ли это? – Damon

+0

когда я говорю класс, который я должен использовать? generateMock или generateStub ? – Dineshkumar

2

Вы должны объявить интерфейс public для Rhino Mocks, чтобы иметь возможность создать макет:

public interface ITaxi 
{ 
    int Fare { get; set; } 
    int getTotalFare();   
} 

Смотрите также Access Modifiers in C#

+0

Почему это должно быть общедоступным? – Dineshkumar

0

класс изменения в общественном

public class Taxi : Car, ITaxi 

interface ITaxi 

по по умолчанию он не является общедоступным

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