爲了獲得良好的測試覆蓋率,我想測試WriteExternal
和ReadExternal
方法IPortableObject
(如Creating an IPortableObject Implementation (.NET)所述)。在.NET中測試Oracle Coherence IPortableObject實現
這裏是類似於我在我的測試方法(我喜歡,它的工作原理)的代碼。
但得到這個工作,我不得不做的子類PofStreamWriter
覆蓋BeginProperty
和PofStreamReader
覆蓋AdvanceTo
。對我來說這聽起來有點有趣,但我無法想出更好的解決方案。以下是我的CoherenceTestHelper的實際代碼。
問題:有沒有其他人的單位測試他們的IPortableObject
執行一個更好的方法?
public static class CoherenceTestHelper
{
public static T CopyUsingPofSerialization<T>(T ipoIn) where T : IPortableObject, new()
{
T ipoOut = new T();
IPofContext context = new SimplePofContext();
using (MemoryStream ms = new MemoryStream())
{
IPofWriter writer = new MyPofStreamWriter(new DataWriter(ms), context);
ipoIn.WriteExternal(writer);
ms.Seek(0, 0);
IPofReader reader = new MyPofStreamReader(new DataReader(ms), context);
ipoOut.ReadExternal(reader);
}
return ipoOut;
}
private class MyPofStreamWriter : PofStreamWriter
{
public MyPofStreamWriter(DataWriter writer, IPofContext context)
: base(writer, context)
{
}
protected override void BeginProperty(int index)
{
}
}
private class MyPofStreamReader : PofStreamReader
{
public MyPofStreamReader(DataReader reader, IPofContext context)
: base(reader, context)
{
}
protected override bool AdvanceTo(int index)
{
return true;
}
}
}
然後,我會需要一個特定的模擬每個IPortableObject實現,其中這個幫助器可以用於任何對象。另外,我想確保調用(例如,ReadString和WriteString)是平衡的,並且以相同的順序,我不知道如何模擬。我對實際執行感到遺憾。 – 2009-05-27 22:33:47