为了获得良好的测试覆盖率,我想测试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