亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

解剖SQLSERVER 第六篇 對OrcaMDF的系統測試里避免regressions(譯)

2024-07-21 02:48:59
字體:
來源:轉載
供稿:網友
解剖SQLSERVER 第六篇 對OrcaMDF的系統測試里避免regressions(譯)解剖SQLSERVER 第六篇 對OrcaMDF的系統測試里避免regressions(譯)

http://imPRove.dk/avoiding-regressions-in-orcamdf-by-system-testing/

當我繼續添加新功能和新的數據結構支持進去OrcaMDF軟件的時候,bug的風險不斷增加

特別是當我開發一個很大的未知功能時,我不能預估結構和該結構的關聯,為了降低風險,測試是很有必要的

單元測試

單元測試是在面向對象編程里測試源代碼某一個功能的最小一部分的測試。一個測試的例子是SqlBigInt數據類型解析類,

他應該長這個樣子

using System;using NUnit.Framework;using OrcaMDF.Core.Engine.SqlTypes;namespace OrcaMDF.Core.Tests.Engine.SqlTypes{    [TestFixture]    public class SqlBigIntTests    {        [Test]        public void GetValue()        {            var type = new SqlBigInt();            byte[] input;            input = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F };            Assert.AreEqual(9223372036854775807, Convert.ToInt64(type.GetValue(input)));            input = new byte[] { 0x82, 0x5A, 0x03, 0x1B, 0xD5, 0x3E, 0xCD, 0x71 };            Assert.AreEqual(8200279581513702018, Convert.ToInt64(type.GetValue(input)));            input = new byte[] { 0x7F, 0xA5, 0xFC, 0xE4, 0x2A, 0xC1, 0x32, 0x8E };            Assert.AreEqual(-8200279581513702017, Convert.ToInt64(type.GetValue(input)));        }        [Test]        public void Length()        {            var type = new SqlBigInt();            Assert.Throws<ArgumentException>(() => type.GetValue(new byte[9]));            Assert.Throws<ArgumentException>(() => type.GetValue(new byte[7]));        }    }}

這個測試包含了SqlBigInt 類的主入口點,測試longbigint 數據類型是否會造成上溢或下溢的情況,也包含長度檢查。

對于像SqlBigInt這樣簡單的類型單元測試會工作得很好。有時候單元測試會很復雜當相關聯的類需要調用相應方法,類等支持他運行的底層結構的時候(mock測試)

雖然這是一個工作策略,測試需要不斷進行,特別在項目早期階段,整個架構都是動態的

系統測試

在測試范圍上,我們需要更大的范圍測試 -系統測試。系統測試旨在測試系統作為一個整體,基本上忽略系統內部工作原理

如果要分類的話可以被分為 黑盒測試。對于OrcaMDF,我估計可以捕獲90%的所有的regressions只使用10%的時間,

相比起單元測試使用更多時間只捕獲少量的regressions 。

因此,這是一個很好的方法在開發期間的測試,同時可以引入關鍵的單元測試和集成測試。

例如我想測試DatabaseMetaData 類里面的用戶表名字的解析,我可以模擬SysObjects的值列表,同時對于DatabaseMetaData 類

的構造函數也能模擬MdfFile 所必須的參數,為了做到這一點,我必須從MdfFile 提取出一個接口并且在上面使用mocking framework

系統測試的方法執行以下流程:

1、連接到SQLSERVER實例

2、在測試固件(Test fixture)里創建測試架構

3、分離數據庫

4、運行OrcaMDF 并加載分離的數據庫驗證結果

一個測試樣例,創建兩個用戶表并且驗證DatabaseMetaData類的輸出

using System.Data.SqlClient;using NUnit.Framework;using OrcaMDF.Core.Engine;namespace OrcaMDF.Core.Tests.Integration{    public class ParseUserTableNames : SqlServerSystemTest    {        [Test]        public void ParseTableNames()        {            using(var mdf = new MdfFile(MdfPath))            {                var metaData = mdf.GetMetaData();                Assert.AreEqual(2, metaData.UserTableNames.Length);                Assert.AreEqual("MyTable", metaData.UserTableNames[0]);                Assert.AreEqual("XYZ", metaData.UserTableNames[1]);            }        }        protected override void RunSetupQueries(SqlConnection conn)        {            var cmd = new SqlCommand(@"                CREATE TABLE MyTable (ID int);                CREATE TABLE XYZ (ID int);", conn);            cmd.ExecuteNonQuery();        }    }}

在實際的真實生活場景里這樣可以非??焖俚倪M行測試。想測試轉發記錄的解析?只需要簡單地創建一個新的測試編寫TSQL代碼來生成目標數據庫狀態然后驗證掃描到的表數據

系統測試的缺點

不幸的是系統測試不是萬能藥,它也有它的缺點。最明顯的一個缺點是性能。

單元測試通常需要運行非常快,基本上允許您在每個文件保存后在后臺運行它們。從綁定CPU開始到運行 ,每一個這樣的系統測試都需要半秒

幸運的是,它們可以并行運行沒有問題。在一臺四核的機器能讓我每分鐘運行480個測試。這能夠讓一個完整的測試集合控制在合理的時間,

同時依然保持測試子集能夠很快運行。通常代碼的更改不會對測試造成太多的影響

第六篇完


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av视频在线免费观看| 欧美专区在线视频| 国产乱肥老妇国产一区二| 俺也去精品视频在线观看| 亚洲最大激情中文字幕| 一区二区三区视频免费| 美日韩在线视频| 午夜精品在线视频| 日韩一区av在线| 欧美另类精品xxxx孕妇| 精品久久在线播放| 日韩在线视频中文字幕| 久久久久久久影视| 久久天天躁狠狠躁老女人| 国产精品久久久久久av下载红粉| 91网在线免费观看| 国产欧美在线看| 国产精品免费观看在线| 亚洲片国产一区一级在线观看| 2021国产精品视频| 亚洲成人av片在线观看| 久久精品中文字幕电影| 国产精品美乳在线观看| 国产一区二区三区中文| 日韩亚洲成人av在线| 日韩高清av一区二区三区| 久久综合88中文色鬼| 大荫蒂欧美视频另类xxxx| 国产成人亚洲综合青青| 97国产成人精品视频| 亚洲高清一二三区| 91视频免费在线| 久久成人人人人精品欧| 在线精品国产欧美| 欧美刺激性大交免费视频| 亚洲成人激情在线观看| 精品偷拍各种wc美女嘘嘘| 久久精品中文字幕| 亚洲精选在线观看| 欧美激情视频给我| 久久久精品欧美| 色一区av在线| 久久久国产一区二区| 久久精品久久精品亚洲人| 亚洲一区亚洲二区亚洲三区| 欧美综合在线观看| 日韩极品精品视频免费观看| 日韩欧美中文在线| 中日韩美女免费视频网站在线观看| 日本免费一区二区三区视频观看| 国产精品爽黄69天堂a| 国产一区二区色| 亚洲综合一区二区不卡| 成人高清视频观看www| 国产欧美va欧美va香蕉在线| 欧洲日本亚洲国产区| 日本精品久久久久影院| 日韩在线观看av| 有码中文亚洲精品| 91在线观看免费网站| 亚州av一区二区| 亚洲欧美精品一区| 伊人久久久久久久久久| 久久精品国产2020观看福利| 欧美另类极品videosbest最新版本| 欧美激情按摩在线| 国产91九色视频| 91亚洲精品久久久久久久久久久久| 在线观看久久久久久| 国产色视频一区| 亚洲午夜国产成人av电影男同| 亚洲字幕一区二区| 欧美日韩激情网| 国产精品第一第二| 亚洲国产成人在线播放| 国产精品视频一区二区三区四| 久久97精品久久久久久久不卡| 中文字幕欧美日韩va免费视频| 亚洲乱码国产乱码精品精天堂| 伊人男人综合视频网| 日韩av最新在线| 欧美精品激情视频| 亚洲成人a**站| 伊人久久精品视频| 日韩免费在线播放| 91在线观看免费高清完整版在线观看| 日韩视频―中文字幕| 亚洲精品乱码久久久久久金桔影视| 欧美成人一区二区三区电影| 精品在线观看国产| 国产亚洲一区二区精品| 中文字幕国产亚洲2019| 欧美久久精品午夜青青大伊人| 欧美日韩免费区域视频在线观看| 久久视频中文字幕| 91久久久久久久一区二区| 亚洲**2019国产| 日韩大片在线观看视频| 亚洲伊人第一页| 97精品在线视频| 亚洲国模精品私拍| 日韩av在线电影网| 日韩精品视频中文在线观看| 亚洲激情视频在线| 国产精品扒开腿做| 欧美成人免费小视频| 国产成人精品电影| 亚洲一区制服诱惑| 亚洲精品资源在线| 欧美国产日韩免费| www.日本久久久久com.| 精品视频中文字幕| 亚洲午夜色婷婷在线| 午夜免费日韩视频| 欧美国产精品人人做人人爱| 国产国产精品人在线视| 欧美激情亚洲另类| 欧美成人免费小视频| 亚州av一区二区| 亚洲性线免费观看视频成熟| 欧美性受xxxx黑人猛交| 国产91色在线播放| 欧美刺激性大交免费视频| 国产精品视频白浆免费视频| 欧美日韩在线另类| 国产一区二区香蕉| 热久久视久久精品18亚洲精品| 全亚洲最色的网站在线观看| 国产精品视频地址| 亚洲成人久久电影| 欧美午夜久久久| 亚洲男人天堂网| 68精品久久久久久欧美| 欧美电影免费观看高清完整| 欧美裸身视频免费观看| 欧美日韩性生活视频| 欧美巨大黑人极品精男| 亚洲欧美日本伦理| 91理论片午午论夜理片久久| 日韩高清有码在线| 国产在线一区二区三区| 国产一区玩具在线观看| 日韩av中文字幕在线免费观看| 国产精品视频久久| 亚洲人精选亚洲人成在线| 九九热精品视频在线播放| 日韩欧美精品在线观看| 欧美大片va欧美在线播放| 亚洲3p在线观看| 亚洲欧美国产精品| 美女久久久久久久久久久| 亚洲一区二区在线播放| 在线视频亚洲欧美| 久久精品小视频| 亚洲视频综合网| 欧美激情亚洲综合一区| 国产精品天天狠天天看| 成人网欧美在线视频| 色在人av网站天堂精品| 超碰91人人草人人干| 欧美夜福利tv在线| 日韩av一卡二卡| 日韩在线免费高清视频| 欧美日韩成人在线视频|