Что такое хороший фреймворк для начинающих в asp.net MVC?(новичок и, вероятно, не хардкорный издеватель) - PullRequest
7 голосов
/ 30 ноября 2010

Я хочу использовать mocking в своих юнит-тестах.

До сих пор я больше запрограммировал 'тесты', а не 'unittests', потому что я тестировал целые потоки программы, но, читая обсуждения, я вижу красоту макетаобъект, время от времени.

Но, оглядываясь вокруг, есть много доступных структур, и я хочу убедиться, что я начинаю с хорошей, потому что я хотел бы потратить время на изучениефальшивый фреймворк только один раз.

Так что, как я сказал в названии, я новичок в насмешках, использую asp.net mvc, и не думаю, что я буду хардкорным издевателем, исследующим краяфальшивый фреймворк.

Чтобы дать вам представление о том, что мне нравится в рамках МОК, мне нравится единство и структура.

Мишель

Ответы [ 3 ]

7 голосов
/ 30 ноября 2010

Я бы порекомендовал Мок . Ранее я пробовал Rhino, но лично я считаю, что API Moq более приятный.

3 голосов
/ 30 ноября 2010

Я использовал оба Rhino Mocks и Moq как часть проектов ASP.NET MVC с большим успехом.Хотя в прошлом эти фреймворки немного отличались, их наборы функций с годами сходились, и поэтому любой из них будет хорошим выбором.Фил Хаак тоже должен сказать .

1 голос
/ 30 ноября 2010

Я рекомендую Мок .

Скажем, у вас есть класс MyClass, определенный следующим образом:

public class MyClass{

    private IMyDependency dependency;

    public MyClass(IMyDependency dependency){
        this.dependency = dependency;
    }

    public void DoSomething(){
        //invoke a method on the dependency
        this.dependency.DoWork();
    }

}

IMyDependency объявлено так:

public interface IMyDependency{
    void DoWork();
}

Теперь, используя Moq, вы можете проверить, что зависимость называется так:

public void DoSomethingWillInvokeDoWorkCorrectly()
{
    var mock = new Mock<IMyDependency>();
    mock.Setup(imd => imd.DoWork()).Verifiable();
    var sut = new MyClass(mock.Object);
    sut.DoSomething();
    //Verify that the mock was called correctly
    mock.Verify();
}

Теперь это был очень простой пример, так что давайте немного оживим его.

открытый класс MyClass2 {

    private IMyDependency2 dependency;

    public MyClass2(IMyDependency2 dependency){
        this.dependency = dependency;
    }

    public void DoSomething(int i){
        //invoke a method on the dependency
        this.dependency.DoWork(i * 2);
    }

}

IMyDependency2 объявлено так:

public interface IMyDependency2{
    void DoWork(int i);
}

Тестовый метод, который проверяет, что правильный параметр передается в зависимость, может выглядеть следующим образом:

public void DoSomethingV2WillInvokeDoWorkCorrectly()
{
    var mock = new Mock<IMyDependency2>();
    int parameter = 60;
    mock.Setup(imd => imd.DoWork(It.Is<int>(i => i == 2 * parameter)).Verifiable();
    var sut = new MyClass2(mock.Object);
    sut.DoSomething(parameter);
    //Verify that the mock was called correctly
    mock.Verify();
}

Как видите, метод Setup теперь добавляет ограничение на параметр, передаваемый в DoWork, говоря, что это int, значение которого должно быть в два раза больше значения переменной parameter.

...