欢迎访问 sinodragon21.cublog.cn
转载请注明出处
乍一看,下面的代码段是正确的
- public static Int64 BytesToInt64(byte[] buf, uint offset)
- {
- Debug.Assert(buf.Length - offset >= 8);
- Int64 n = (Int64)(buf[offset] +
- buf[offset + 1] * (1 << 8) +
- buf[offset + 2] * (1 << 16) +
- buf[offset + 3] * (1 << 24) +
- buf[offset + 4] * (1 << 32) +
- buf[offset + 5] * (1 << 40) +
- buf[offset + 6] * (1 << 48) +
- buf[offset + 7] * (1 << 56));
- return n;
- }
其实存在潜在的bug,在对该函数做单元测试(unit test)时,发现了bug。 测试用例如下:
- public partial class TxMathTest
- {
- [TestMethod]
- public void BytesToInt64204()
- {
- long l;
- byte[] bts = { 0x12, 0x34, 0x56, 0x78, 0x12, 0x34, 0x56, 0x78 };
- l = this.BytesToInt64(bts, 0u);
- Assert.AreEqual<long>(0x7856341278563412, l);
- }
- }
修改后:
- public static Int64 BytesToInt64(byte[] buf, uint offset)
- {
- Debug.Assert(buf.Length - offset >= 8);
- Int64 n = (buf[offset]
- | ((Int64)buf[offset + 1] << 8)
- | ((Int64)buf[offset + 2] << 16)
- | ((Int64)buf[offset + 3] << 24)
- | ((Int64)buf[offset + 4] << 32)
- | ((Int64)buf[offset + 5] << 40)
- | ((Int64)buf[offset + 6] << 48)
- | ((Int64)buf[offset + 7] << 56))
-
- return n;
- }
感想:
以前做开发,从未重视过unit test,最近才发现unit test是开发人员的法宝,可以第一时间发现函数级的bug,将问题扼杀在摇篮中,可以极大节省开发和改bug的成本。
阅读(1100) | 评论(0) | 转发(0) |