私の意見では、公式ドキュメントに精通していると思います。私の提案は、Rhino を使用してみることです。より具体的な問題が発生した場合は、SO または他の場所で解決策を探してください。Rhino モックの包括的なチート シートはないと思います。「Rhino Mocks を使ってこれとあれを行うにはどうすればよいか」と尋ねる方が運がいいと思います。
編集:まあ、AAA を対象とする場合、記録/再生を使用する必要はありません。AAA には、次の 3 つの手順が含まれます。
- たとえば、モック化されたクラスの動作を設定するためのArrange 。
.
IOmicronDll mockWrapper = MockRepository.GenerateMock<IOmicronDll>();
mockWrapper.Expect(wrapper => wrapper.Lock(1, ref errors)).OutRef(string.Empty).Return(true).Repeat.Any();
mockWrapper.Expect(wrapper => wrapper.Exec(1, "sys:cfg?(type)", ref output, ref errors)).OutRef("1,CMC 56,0;", "").Return(true).Repeat.Any();
mockWrapper.Expect(wrapper => wrapper.Exec("1", "sys:cfg?(type)", ref output, ref errors)).OutRef("1,CMC 56,0;", "").Return(true).Repeat.Any();
Microsoft.Practices.Unity.UnityContainer c = new Microsoft.Practices.Unity.UnityContainer();
c.RegisterInstance<IOmicronDll>(mockWrapper);
Act、テストの実行を表します
public Omicron(int deviceID)
{
try
{
if (g_Omicron == null)
g_Omicron = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<CMEngineWrapper.IOmicronDll>();
m_UniqueIdentifier = Guid.NewGuid();
m_Logger = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<AdvAdmittance.Framework.ILogger>();
m_ID = deviceID;
GetConfiguration();
g_InstancesCount++;
m_PollThread = new Thread(new ThreadStart(DoPoll));
m_PollThread.Start();
}
そしてAssert、これは結果を検証することを表します
.
Assert.AreEqual("CMC 56", omicron.Type);
mockWrapper.AssertWasCalled(wrapper => wrapper.Release(), options => options.Repeat.AtLeastOnce());
おそらく、上記の例は最善ではありませんが、正しい方向に導くかもしれません。