Получить инверсию соединения?

Можно получить некоторую информацию:

От Martin Fowler о Насмешке и Тупике

Фальшивка объекты на самом деле имеют рабочие реализации, но обычно берут некоторый ярлык, который делает их не подходящими для производства

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

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

От xunitpattern:

Фальшивка : Мы получаем или создаем очень легкую реализацию той же функциональности в соответствии с компонентом, от которого зависит SUT, и дайте SUT команду использовать его вместо реального.

Тупик : Эта реализация настроена для ответа на вызовы от SUT со значениями (или исключения), который осуществит Непротестированный Код (см. Производственные Ошибки на странице X) в SUT. Ключевой признак для использования Тестового Тупика имеет Непротестированный Код, вызванный неспособностью управлять косвенными исходными данными фиктивного объекта SUT

, который реализует тот же интерфейс как объект, от которого зависит SUT (Система Под Тестом). Мы можем использовать Фиктивный объект в качестве наблюдательного поста, когда мы должны сделать Проверку Поведения, чтобы не иметь Непротестированное Требование (см. Производственные Ошибки на странице X), вызванный неспособностью наблюдать побочные эффекты вызова методов на SUT.

Лично

я пытаюсь упростить при помощи: Насмешка и Тупик. Я использую Насмешку, когда это - объект, который возвращает значение, которое установлено к протестированному классу. Я использую Тупик для имитации Интерфейсного или Абстрактного класса, который будет протестирован. На самом деле действительно не имеет значения, что Вы называете им, они - все классы, которые не используются в производстве и используются в качестве служебных классов для тестирования.

19
задан redcalx 28 November 2012 в 16:49
поделиться

2 ответа

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

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

РЕДАКТИРОВАТЬ: Декартов результат даст вам группы пользователей *. Вам придется вычесть из него GroupUsers. Извините, у меня нет готового SQL для этого, и я не могу попробовать его сейчас.

2
ответ дан 30 November 2019 в 03:38
поделиться

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

select
    u.*
from
    users u
    left outer join groupusers g on
        u.userid = g.userid
where
    g.userid is null

Если вы хотите найти всех пользователей, не входящих в определенную группу:

select
    u.*
from
    users u
    left outer join groupusers g on
        u.userid = g.userid
        and g.groupid = @GroupID
where
    g.userid is null

Это только исключит пользователей в этой конкретной группе. Все остальные пользователи будут возвращены. Это связано с тем, что условие groupid было выполнено в предложении join , которое ограничивает объединенные, а не возвращаемые строки, что и делает предложение where .

]
32
ответ дан 30 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

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