有很多StackOverflow的答案解释了如何为自定义异常类编写单元测试。
但是它们都使用类BinaryFormatter来序列化和反序列化。问题:建议不要再使用它了。
但那该怎么做呢?
这是迄今为止的代码(使用BinarFormatter(:
[TestMethod]
public void test()
{
// Arrange
const string TestMessage = "testMessage";
var exception = new AbcException(TestMessage);
using var stream = new MemoryStream();
var formatter = new BinaryFormatter();
// Act
formatter.Serialize(stream, exception);
stream.Position = 0; // Reset stream position
var deserializedException = (AbcException)formatter.Deserialize(stream);
// Assert
Assert.AreEqual(TestMessage, deserializedException.Message);
}
我怀疑这些建议源自.Net远程处理,即如果远程调用产生异常,则需要对其进行序列化才能传输到客户端。
.Net远程处理在通常使用REST或其他更现代的协议进行客户端-服务器通信的现代开发中相当罕见,而且这些协议通常有其他报告错误的方式,如http状态代码。
因此,在实践中,我认为几乎不需要编写单元测试来测试异常的序列化,除非您实际使用.Net远程处理或任何其他基于二进制格式化程序的技术。如果你这样做了,你可能会考虑迁移到更新的技术。
所以我的建议是不要写任何这样的测试。一般来说,如果你不知道为什么要写单元测试,就不要写。或者至少,在遵循这些建议之前,先弄清楚为什么会有这样的建议。