2009-09-27 2 views
0
[Test] 
public void TestUserProfileInsert() 
{ 
    using (new TestBindingsWrapper("TestBindings", "", new TestModule())) 
    { 
    // Setup the mock the dataprovider 
    MyMocks.MockDataProvider.Setup(x => x.InsertUserProfile(It.IsAny<IUserProfile>())).Returns(1); 

    IUserProfile up = new UserProfile(); 

    IUserProfileManager manager = new UserProfileManager(); 
    int result = manager.Insert(up); 
    Assert.AreEqual(1, result); 
    MyMocks.MockDataProvider.Verify(x => x.InsertUserProfile(up), Times.Once()); 
    } 
} 

Я также использую ninject. Кажется, так как я устанавливаю возвращаемое значение, что действительно тестируется, это шутка или я чего-то не хватает?Этот тест mbunit действительно делает что-то важное?

+0

Почему вы не вызываете метод Ninject 'Get' для активации ваших объектов? –

ответ

0

Он тестирует, что manager.Insert (up) возвращает 1, что, я думаю, является ожидаемым кодом возврата для успеха (или для отказа. Тогда я бы предположил, что последняя строка проверяет, что предоставленный вами макет единственная вставка на нем. Это в основном тесты, чтобы убедиться, что UserProfileManager правильно передает данные и использует данные поставщиков данных, которые вы поставляете.

ПРИМЕЧАНИЕ: Чтобы сделать этот тест лучше, я рекомендовал бы сделать mock return 7, а затем проверить, что 7 возвращается вероятность того, что объект UserProfileManager просто вернет 7, что он все время возвращает 1

+0

, но будет ли он вставляться в базу данных? вставка возвращает идентификатор вновь вставленного объекта. ID - столбец PK из db. – user179764

+0

В этом примере я почти уверен, что 1 - это возврат от макетного объекта. Если вам нужно знать больше, вы должны поговорить с кем-то, с кем работаете, знает, как работают Mocks. Мы не можем волшебным образом рассказать вам, как настроена структура тестирования в вашей компании. – tster

0

При написании теста вы едите t хотите, чтобы он выполнял код с ошибкой так, как вы ожидаете (либо ожидаемая функциональность нового кода, либо текущее поведение). Только после этого вы создаете свой код или изменяете тест, чтобы все было в порядке. Итак, если это ваш главный вопрос относительно этого теста, я рекомендую вам отступить и спросить себя, что вы действительно пытаетесь проверить.

Код, который вы разместили, больше похож на Integration Test, чем на Unit Test, который вы пытаетесь сделать? Ваши комментарии предполагают, что вы беспокоитесь о вставках в базу данных, , но вы издеваетесь над некоторыми объектами. Если я тестирую модуль, я с удивлением вижу, что вы инициализируете так много конкретных объектов вручную (например, UserProfileManager). Где ваш MockDataProvider действительно входит в путь выполнения?