[Rhino Mocks] Mock и BLToolkit
От: cadet354 Россия
Дата: 29.09.08 13:52
Оценка:
Доброго времени, есть у кого опыт работы с Rhino Mocks применительно к созданию моков?

                [Test]
        public void UseMocks()
        {
            MockRepository mocks = new MockRepository();
            SprocQuery<Source> mock = mocks.CreateMock<SprocQuery<Source>>();
            Expect.Call(mock.SelectByKey(1)).Return(new Source(){SourceId=0});          
            mocks.ReplayAll();
            Assert.AreEqual(0, mock.SelectByKey(1).SourceId);           
            mocks.VerifyAll();

        }

падает с сообщением:

System.TypeLoadException: Method 'SelectAll' on type 'SprocQuery`1Proxya9ec02f782ce4d53b43c0f070f08b3c2' from assembly 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=a621a9e7e5c32e69' tried to implicitly override a method with weaker type parameter constraints.

возможно ли их подружить?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: [Rhino Mocks] Mock и BLToolkit
От: Блудов Павел Россия  
Дата: 30.09.08 02:00
Оценка:
Здравствуйте, cadet354, Вы писали:

C>

C>System.TypeLoadException: Method 'SelectAll' on type 'SprocQuery`1Proxya9ec02f782ce4d53b43c0f070f08b3c2' from assembly 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=a621a9e7e5c32e69' tried to implicitly override a method with weaker type parameter constraints.

C>возможно ли их подружить?
У меня аналогичный пример с использованием TypeMock отработал без ошибок.
Пишите в техподдержку Rhino. Ошибка явно в их коде. Скорее всего, в реализации заглушки метода
public virtual L SelectAll<L>(DbManager db)
    where L : IList<T>, new()
{
    return SelectAll<L>(db, new L());
}

Кстати, сам BLToolkit не проходит вот такой тест:
public abstract class Test<T>
{
    public abstract L SelectAll<L>() where L : IList<T>, new();
}
[Test]
void GenericMixTest()
{
    Test<int> t = TypeAccessor.CreateInstance<Test<int>>();
    List<int> o = t.SelectAll<List<int>>();
}

Валится с точно таким же исключением. Возможно проблема в SRE, но это нужно проверить.

Таки да: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=282829

Официальный workaround, как обычно, использовать Mono. В Mono не считают зазорным исправлять ошибки в SRE. Будем ждать .Net 4.0, может там исправят.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[2]: [Rhino Mocks] Mock и BLToolkit
От: cadet354 Россия
Дата: 30.09.08 05:39
Оценка:
Здравствуйте, Блудов Павел, Вы писали:


БП>Официальный workaround, как обычно, использовать Mono. В Mono не считают зазорным исправлять ошибки в SRE. Будем ждать .Net 4.0, может там исправят.

печально, если все пойдет таким путем, то МS купит Mono как сделала недавно с jQuery
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Rhino Mocks] Mock и BLToolkit
От: cadet354 Россия
Дата: 30.09.08 06:12
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

интересно как это делает TypeMock, примером не поделитесь?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: [Rhino Mocks] Mock и BLToolkit
От: Блудов Павел Россия  
Дата: 30.09.08 06:21
Оценка:
Здравствуйте, cadet354, Вы писали:

C>интересно как это делает TypeMock, примером не поделитесь?

Они похоже единственные, кто делает это правильно
Автор: Meny
Дата: 07.07.08
.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[3]: [Rhino Mocks] Mock и BLToolkit
От: Блудов Павел Россия  
Дата: 30.09.08 06:21
Оценка:
Здравствуйте, cadet354, Вы писали:

C>печально, если все пойдет таким путем, то МS купит Mono как сделала недавно с jQuery

Как раз это тот редкий случай, когда интерес, проявляемый Майкрософт не привёл к печальным последствиям.
Здесь сказано только что они хотят вложить денег в этот проект.
Ни о какой покупке и смене лицензии речи пока не идёт. Поживём увидим.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[4]: [Rhino Mocks] Mock и BLToolkit
От: cadet354 Россия
Дата: 30.09.08 07:20
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Здравствуйте, cadet354, Вы писали:


C>>интересно как это делает TypeMock, примером не поделитесь?

БП>Они похоже единственные, кто делает это правильно
Автор: Meny
Дата: 07.07.08
.

буду посмотреть, (Moq как и Rhino использует dynamic proxy от castle).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: [TypeMock] Mock и BLToolkit
От: cadet354 Россия
Дата: 30.09.08 07:52
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

что-то не пойму как правильно готовить их
[Test]
        public void UsingPartialMocks()
        {
            using (
                RecordExpectations recorder = RecorderManager.StartRecording())
            {
                var mockedDataBases =
                    RecorderManager.CreateMockedObject<SprocQuery<Source>>();
                mockedDataBases.SelectByKey(123);
                recorder.Return(new Source {SourceId = 1});
            }
            var original = new SprocQuery<Source>();
            Assert.IsTrue(original.SelectByKey(123).SourceId == 1);
            MockManager.Verify();
        }

отваливается с таким сообщением:

TypeMock.TypeMockException:
*** Cannot return a value for SprocQuery`1.SelectByKey() because no value was set. use recorder.Return().

но я в стороке: recorder.Return(new Source {SourceId = 1}); указал что должно как-бы вернуться.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Rhino Mocks] Mock и BLToolkit
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.10.08 11:13
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Официальный workaround, как обычно, использовать Mono. В Mono не считают зазорным исправлять ошибки в SRE.


Проблема в том, что при этом в Моно столько куда более важных проблем, что сей факт успокаивает слабо
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[5]: [TypeMock] Mock и BLToolkit
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 21.10.08 06:34
Оценка:
Здравствуйте, cadet354, Вы писали:

C>отваливается с таким сообщением:

C>

C>TypeMock.TypeMockException:
C>*** Cannot return a value for SprocQuery`1.SelectByKey() because no value was set. use recorder.Return().

C>но я в стороке: recorder.Return(new Source {SourceId = 1}); указал что должно как-бы вернуться.

ну так ты же замокал совсем другой объект. Надо как то так:
[Test]
        public void UsingPartialMocks()
        {
            var mockedDataBases =
                    RecorderManager.CreateMockedObject<SprocQuery<Source>>();
            using (
                RecordExpectations recorder = RecorderManager.StartRecording())
            {
                mockedDataBases.SelectByKey(123);
                recorder.Return(new Source {SourceId = 1});
            }
            Assert.IsTrue(mockedDataBases.SelectByKey(123).SourceId == 1);
            MockManager.Verify();
        }

я к тому же не уверен что создание mock-а внутри RecorderManager.StartRecording() — это правильно. По крайней мере из их туториалов я такой практики не проследил
"Что не завершено, не сделано вовсе" Гаусс
Re[6]: [TypeMock] Mock и BLToolkit
От: cadet354 Россия
Дата: 21.10.08 06:58
Оценка:
Здравствуйте, sadomovalex, Вы писали:


S>ну так ты же замокал совсем другой объект. Надо как то так:


идея была следующая:
"замокать" любое обращение к SprocQuery<Source>.SelectByKey(123), а не только определенного обьекта,т.е. я хотел описать паттерн который нужно перехватывать, возможно я слишком много хочу .
Пока переписал на интерфейсы, и подход в стиле Moq оказался мне более понятным.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.