Суть Swagger в том, что он использует сигнатуры вашего метода для генерации документации о том, как работает ваш код. Обход всех нормальных веб-API и выбор чтения необработанного HTTP-запроса означает, что Swagger не может видеть, что вы делаете, что затрудняет автоматическое определение того, что делает ваш код. Техника, которую вы используете для чтения необработанного запроса и использования динамического, имеет ряд других недостатков.
Вместо этого мы должны определить подходящую модель для публикации в нашем API. Это позволит Web API выполнять свою работу, механизм связывания будет обрабатывать преобразование запроса в экземпляр CreateAccountRequest.
public class CreateAccountRequest
{
public string Email { get; set; }
public string Name { get; set; }
public string Domain { get; set; }
}
Тогда мы можем заставить наш метод действия взять этот экземпляр этого класса в качестве параметра.
[HttpPost]
[ActionName("create-account")]
public IHttpActionResult CreateAccount(CreateAccountRequest request)
{
//now here you can validate the request if you want
}
Swagger должен быть в состоянии понять этот метод сейчас, что позволяет NSwag генерировать полезного клиента.
Обратите внимание, что вместо пользовательской проверки C # вы должны изучить встроенные инструменты, которые Web API предоставляет для проверки модели . Тогда все, что вам нужно сделать, это проверить ModelState, а не проверять вручную каждый параметр. Другие инструменты также могут посмотреть на атрибуты ваших моделей, улучшая их опыт.
Какой твой тест пытается достичь?
Какое поведение или состояние вы проверяете? В частности, вы проверяете, что Collaborator (Data) имеет его ListCount
метод, называемый методом (тестирование на основе взаимодействия), или вы просто хотите сделать ListCount
Вернуть консервированное значение для привода Класс под тестом при проверке результата в других местах (традиционное государственное тестирование)?
Если вы хотите установить ожидание, используйте макет и ожидание:
Использование Mockrepository. CreateMock
и mymock.expect (x => x.listcount ())
Если вы хотите заглушить метод, используйте Mockreposity .CreateStub
и MyStub.stub (x => x.listcount ())
.
.
Рой Осеров имеет очень хорошее объяснение издевателей и заглушек.
Пожалуйста, напишите еще код!
Нам нужна полная картина того, как вы создаете заглушку (или издевательства) и как результат используется по сравнению с тестом класса. ListCount
имеет входной параметр? Если это так, что он представляет? Вы заботитесь, если это было , называется определенным значением? Вы заботитесь, если ListCount
возвращает определенное значение?
Как отметил Саймон Лароче, если менеджер на самом деле не делает ничего, с издевательством / неподвижным возвращающим значение ListCount, то тест не пройдет или не пройдет из-за этого. Весь тест ожидал, что издевался / неподвижный метод называется - не более.
Чтобы лучше понять проблему, рассмотрите три части информации, и вы скоро поймете это:
Сравнить: Тестирование на основе взаимодействия с помощью издеваний . Вызов на макет тест.
[Test]
public void calling_ListCount_calls_ListCount_on_DAL()
{
// Arrange
var dalMock = MockRepository.Mock<IDAL>();
var dalMock.Expect(x => x.ListCount()).Returns(1);
var manager = new Manager(dalMock);
// Act
manager.ListCount();
// Assert -- Test is 100% interaction based
dalMock.VerifyAllExpectations();
}
Состояние на основе тестирования с заглушкой . Ступень управляет тестом, но не является частью ожидания.
[Test]
public void calling_ListCount_returns_same_count_as_DAL()
{
// Arrange
var dalStub = MockRepository.Stub<IDAL>();
var dalStub.Stub(x => x.ListCount()).Returns(1);
var manager = new Manager(dalMock);
// Act
int listCount = manager.ListCount();
// Assert -- Test is 100% state based
Assert.That(listCount, Is.EqualTo(1),
"count should've been identical to the one returned by the dal!");
}
Я лично оказываю на основе государственных тестирование, где вообще возможно, хотя тестирование на основе взаимодействия часто требуется для API, разработанных с , не просим в виду, так как у вас не будет открытое состояние, чтобы проверить против!
Путаница API. Макеты не заглушки. Или они?
Различие между издевательствами и заглушкой в носовых макетах запутывается. Традиционно заглушки не должны иметь ожидания - поэтому, если ваш тест дважды не имел его метода, это не приведет к неудачному тесту.
... Тем не менее, API Rhino Models мощный, но сбивает с толку, как оно позволяет вам ставить ожидания на заглушки, которые, для меня, идет против принятой терминологии. Я не думаю, что большая часть терминологии, либо ума. Было бы лучше, если бы различие было устранено, и методы вызвали тест двойной, на мой взгляд, на мой взгляд.
Я думаю, что это имеет отношение что Ваш менеджер. ListCount () делает с возвращаемым значением.
, Если это не использует его затем, Ваш DAL может возвратить что-либо, что это не будет иметь значения.
public class Manager
{
public Manager(DAL data)
{
this.data = data
}
public void ListCount()
{
data.ListCount(1); //Not doing anything with return value
DoingSomeOtherStuff();
}
}
, Если Ваше количество списка делает что-то со значением, что необходимо затем поставить утверждения, что оно делает. Для exemple
Assert.IsTrue(manager.SomeState == "someValue");
Вы пытались использовать
data.AssertWasCalled(x => x.ListCount(1) = Arg.Is(EXPECTED_VALUE));