RhinoMock по сравнению с TypeMock по сравнению с насмешкой NUNIT?

Это работает на меня. Возможно, выполняя более поздние версии чего-то и выше> 1 000 объектов. выполнение нескольких миллионов файлов теперь. Однако его все еще не законченный после половины дня и никаких средств проверить в GUI AWS = /

# Set bucket name to clearout
BUCKET = 'bucket-to-clear'

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket(BUCKET)

max_len         = 1000      # max 1000 items at one req
chunk_counter   = 0         # just to keep track
keys            = []        # collect to delete

# clear files
def clearout():
    global bucket
    global chunk_counter
    global keys
    result = bucket.delete_objects(Delete=dict(Objects=keys))

    if result["ResponseMetadata"]["HTTPStatusCode"] != 200:
        print("Issue with response")
        print(result)

    chunk_counter += 1
    keys = []
    print(". {n} chunks so far".format(n=chunk_counter))
    return

# start
for key in bucket.object_versions.all():
    item = {'Key': key.object_key, 'VersionId': key.id}
    keys.append(item)
    if len(keys) >= max_len:
        clearout()

# make sure last files are cleared as well
if len(keys) > 0:
    clearout()

print("")
print("Done, {n} items deleted".format(n=chunk_counter*max_len))
#bucket.delete() #as per usual uncomment if you're sure!
19
задан Dan Appleyard 4 September 2009 в 13:23
поделиться

4 ответа

TypeMock - это коммерческий продукт (то есть вам придется за него платить), но он позволяет имитировать конкретные объекты - в отличие от RhinoMocks / NUnit / MoQ, которые могут имитировать только интерфейс / абстрактный класс. . Как это достигается, это пограничная черная магия, но она делает некоторые очень умные вещи с CLR.

Это может быть особенно полезно, когда вы используете в своем проекте библиотеки, которые не используют много интерфейсов. Так, например, вы можете использовать TypeMock для имитации контекста данных LINQtoSQL или объектов Sharepoint. Однако, если вы используете TypeMock, это не оправдание плохого дизайна в вашем приложении .

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

37
ответ дан 30 November 2019 в 02:00
поделиться

Видео под названием TDD - Understanding Mock Objects , написанное Роем Ошеровым, очень помогает в изучении различий между различными библиотеками имитаций. Он не раскрывает подробно все аспекты, но достаточно, чтобы вы поняли. Надеюсь, это поможет. Рой также является главным архитектором TypeMock и очень влиятельной фигурой на арене модульного тестирования. Я не могу порекомендовать это видео для тех, кто хочет научиться использовать имитацию, а также узнать о доступных библиотеках.

Основное различие между TypeMock и библиотекой с открытым исходным кодом заключается в том, что TypeMock использует API Profiler, предоставляемый Microsoft вместо динамического прокси . Это позволяет TypeMock имитировать конкретные классы и статические методы. Если вы не уверены, что такое профилировщик, это тот же API, который используется такими инструментами, как dotTrace JetBrain и профилировщики Ants .Net от RedGate. TypeMock просто использует API по-другому, чтобы подделать (имитировать) то, что вы ему рассказываете.

@RichardOD, спасибо за напоминание, его книга « Искусство модульного тестирования » более подробно описывает где видео нет. У меня есть книга, и она очень информативна.

19
ответ дан 30 November 2019 в 02:00
поделиться
  • Rhino.Mocks - это среда с открытым исходным кодом, которая постоянно развивается и совершенствуется одним из самых плодовитых разработчиков отрасли. Он существует некоторое время и, следовательно, поддерживает довольно много разных парадигм насмешек. Таким образом, это может быть немного сложнее в том смысле, что вы можете найти руководства для «старого» способа работы. Подсказка: SetUpResultFor () и Expect.Call () - старые способы работы. Новый способ - mockObject.AssertWasCalled () .

У меня не было личного опыта с этими другими, но ...

  • MOQ - это среда с открытым исходным кодом, постоянно развивающаяся и улучшающаяся одним из несколько менее плодовитые разработчики отрасли (по сравнению с Айенде). Он новее и поэтому не имеет некоторых функций, которые имеют Rhino. Замечает. Обычно это не проблема, так как эти функции, как правило, не рекомендуются в Rhino. Я слышал, что из-за этого его немного легче выучить (кстати, фреймворки имитаторов выучить несложно).
  • NUnit Mocks очень странный в плане имитации. Он не поддерживает предпочтительный в настоящее время синтаксис Arrange-Act-Assert, полагаясь вместо этого на Expect-Verify (запись / воспроизведение). Он также полагается на строки для идентификации имен методов и свойств вместо лямбда-выражений. Это делает его значительно устойчивым к рефакторингу. Это серьезная проблема. Я бы не рекомендовал его.
  • TypeMock Isolater - это хардкорный платный фреймворк для имитации от компании (принадлежащей?) Рою Ошерову - парню, который знает свое тестирование, но также имеет несколько спорных мнений о том, как его применять. Это действительно интенсивно в том, что касается того, что он может сделать - спуститься до нижнего уровня и изменить работу объектов CLR. Однако философия TypeMock на самом деле не является 100% TDD. Частично преимущества TDD заключаются в том, что, приняв ограничения фреймворков Mocking, вы создадите лучший код. TypeMock разрушает эти ограничения на части. Насколько мне известно, его чаще всего используют люди, которые пытаются получить код, который они не контролируют при тестировании.
14
ответ дан 30 November 2019 в 02:00
поделиться

Я все время использую TypeMock и считаю его очень мощным инструментом это может улучшить охват моих модульных тестов. Это потому, что я работаю с SharePoint, и только TypeMock может позволить мне имитировать классы SharePoint - поскольку они являются конкретными классами, а не интерфейсами.

Мокинг классов SharePoint невозможен с RhinoMock, Moq, NUNit и т. Д., Поскольку (я считаю) им нужны интерфейсы для имитации объектов, а не возможность имитировать фактические конкретные классы.

Если ваш код действительно использует много интерфейсов, а вы не используете его

2
ответ дан 30 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: