데이터 베이스 MySQL 튜토리얼 解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(

解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(

Jun 07, 2016 pm 03:20 PM
sqlserver 시험 체계

解剖 SQLSERVER 第六篇 对OrcaMDF的 系统 测试 里 避免 regressions(译) http://improve.dk/avoiding-regressions-in-orcamdf-by-system-testing/ 当我继续添加新功能和新的数据结构支持进去OrcaMDF软件的时候,bug的风险不断增加 特别是当我开发一个很大

解剖SQLSERVER 第六篇  对OrcaMDF的系统测试避免regressions (译)

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

当我继续添加新功能和新的数据结构支持进去OrcaMDF软件的时候,bug的风险不断增加

特别是当我开发一个很大的未知功能时,我不能预估结构和该结构的关联,为了降低风险,测试是很有必要的

 

单元测试

单元测试是在面向对象编程里测试源代码某一个功能的最小一部分的测试。一个测试的例子是SqlBigInt数据类型解析类,

他应该长这个样子

<span>using</span><span> System;
</span><span>using</span><span> NUnit.Framework;
</span><span>using</span><span> OrcaMDF.Core.Engine.SqlTypes;

</span><span>namespace</span><span> OrcaMDF.Core.Tests.Engine.SqlTypes
{
    [TestFixture]
    </span><span>public</span> <span>class</span><span> SqlBigIntTests
    {
        [Test]
        </span><span>public</span> <span>void</span><span> GetValue()
        {
            </span><span>var</span> type = <span>new</span><span> SqlBigInt();
            </span><span>byte</span><span>[] input;

            input </span>= <span>new</span> <span>byte</span>[] { <span>0xFF</span>, <span>0xFF</span>, <span>0xFF</span>, <span>0xFF</span>, <span>0xFF</span>, <span>0xFF</span>, <span>0xFF</span>, <span>0x7F</span><span> };
            Assert.AreEqual(</span><span>9223372036854775807</span><span>, Convert.ToInt64(type.GetValue(input)));

            input </span>= <span>new</span> <span>byte</span>[] { <span>0x82</span>, <span>0x5A</span>, <span>0x03</span>, <span>0x1B</span>, <span>0xD5</span>, <span>0x3E</span>, <span>0xCD</span>, <span>0x71</span><span> };
            Assert.AreEqual(</span><span>8200279581513702018</span><span>, Convert.ToInt64(type.GetValue(input)));

            input </span>= <span>new</span> <span>byte</span>[] { <span>0x7F</span>, <span>0xA5</span>, <span>0xFC</span>, <span>0xE4</span>, <span>0x2A</span>, <span>0xC1</span>, <span>0x32</span>, <span>0x8E</span><span> };
            Assert.AreEqual(</span>-<span>8200279581513702017</span><span>, Convert.ToInt64(type.GetValue(input)));
        }

        [Test]
        </span><span>public</span> <span>void</span><span> Length()
        {
            </span><span>var</span> type = <span>new</span><span> SqlBigInt();

            Assert.Throws</span><argumentexception>(() => type.GetValue(<span>new</span> <span>byte</span>[<span>9</span><span>]));
            Assert.Throws</span><argumentexception>(() => type.GetValue(<span>new</span> <span>byte</span>[<span>7</span><span>]));
        }
    }
}</span></argumentexception></argumentexception>
로그인 후 복사

这个测试包含了SqlBigInt 类的主入口点,测试long bigint 数据类型是否会造成上溢或下溢的情况,也包含长度检查。

对于像SqlBigInt这样简单的类型单元测试会工作得很好。有时候单元测试会很复杂当相关联的类需要调用相应方法,类等支持他运行的底层结构的时候(mock测试

虽然这是一个工作策略,测试需要不断进行,特别在项目早期阶段,整个架构都是动态的

 

系统测试

测试范围上,我们需要更大的范围测试 -系统测试系统测试旨在测试系统作为一个整体,基本上忽略系统内部工作原理

如果要分类的话可以被分为 黑盒测试。对于OrcaMDF,我估计可以捕获90%的所有的regressions 只使用10%的时间,

相比起单元测试使用更多时间只捕获少量的regressions 。

因此,这是一个很好的方法在开发期间的测试,同时可以引入关键的单元测试和集成测试

例如我想测试DatabaseMetaData 类里面的用户表名字的解析,我可以模拟SysObjects的值列表,同时对于DatabaseMetaData 类

的构造函数也能模拟MdfFile 所必须的参数,为了做到这一点,我必须从MdfFile 提取出一个接口并且在上面使用mocking framework

 

系统测试的方法执行以下流程:

1、连接到SQLSERVER实例

2、在测试固件(Test fixture)里创建测试架构

3、分离数据库

4、运行OrcaMDF 并加载分离的数据库验证结果

 

一个测试样例,创建两个用户表并且验证DatabaseMetaData类的输出

<span>using</span><span> System.Data.SqlClient;
</span><span>using</span><span> NUnit.Framework;
</span><span>using</span><span> OrcaMDF.Core.Engine;

</span><span>namespace</span><span> OrcaMDF.Core.Tests.Integration
{
    </span><span>public</span> <span>class</span><span> ParseUserTableNames : SqlServerSystemTest
    {
        [Test]
        </span><span>public</span> <span>void</span><span> ParseTableNames()
        {
            </span><span>using</span>(<span>var</span> mdf = <span>new</span><span> MdfFile(MdfPath))
            {
                </span><span>var</span> metaData =<span> mdf.GetMetaData();

                Assert.AreEqual(</span><span>2</span><span>, metaData.UserTableNames.Length);
                Assert.AreEqual(</span><span>"</span><span>MyTable</span><span>"</span>, metaData.UserTableNames[<span>0</span><span>]);
                Assert.AreEqual(</span><span>"</span><span>XYZ</span><span>"</span>, metaData.UserTableNames[<span>1</span><span>]);
            }
        }

        </span><span>protected</span> <span>override</span> <span>void</span><span> RunSetupQueries(SqlConnection conn)
        {
            </span><span>var</span> cmd = <span>new</span> SqlCommand(<span>@"</span><span>
                CREATE TABLE MyTable (ID int);
                CREATE TABLE XYZ (ID int);</span><span>"</span><span>, conn);
            cmd.ExecuteNonQuery();
        }
    }
}</span>
로그인 후 복사

 

在实际的真实生活场景里这样可以非常快速的进行测试。想测试转发记录的解析?只需要简单地创建一个新的测试
编写TSQL代码来生成目标数据库状态然后验证扫描到的表数据

 

系统测试的缺点

不幸的是系统测试不是万能药,它也有它的缺点。最明显的一个缺点是性能。

单元测试通常需要运行非常快,基本上允许您在每个文件保存后在后台运行它们。从绑定CPU开始到运行 ,每一个这样的系统测试都需要半秒

幸运的是,它们可以并行运行没有问题。在一台四核的机器能让我每分钟运行480个测试。这能够让一个完整的测试集合控制在合理的时间,

同时依然保持测试子集能够很快运行。通常代码的更改不会对测试造成太多的影响

 

第六篇完

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

mdf 파일을 sqlserver로 가져오는 방법 mdf 파일을 sqlserver로 가져오는 방법 Apr 08, 2024 am 11:41 AM

가져오기 단계는 다음과 같습니다. MDF 파일을 SQL Server의 데이터 디렉터리(일반적으로 C:\Program Files\Microsoft SQL Server\MSSQL\DATA)에 복사합니다. SSMS(SQL Server Management Studio)에서 데이터베이스를 열고 연결을 선택합니다. 추가 버튼을 클릭하고 MDF 파일을 선택합니다. 데이터베이스 이름을 확인하고 확인 버튼을 클릭합니다.

sqlserver 데이터베이스에 이름이 지정된 개체가 이미 존재하는 문제를 해결하는 방법 sqlserver 데이터베이스에 이름이 지정된 개체가 이미 존재하는 문제를 해결하는 방법 Apr 05, 2024 pm 09:42 PM

SQL Server 데이터베이스에 이미 존재하는 동일한 이름을 가진 개체의 경우 다음 단계를 수행해야 합니다. 개체 유형(테이블, 뷰, 저장 프로시저)을 확인합니다. IF NOT EXISTS를 사용하면 객체가 비어 있는 경우 생성을 건너뛸 수 있습니다. 개체에 데이터가 있는 경우 다른 이름을 사용하거나 구조를 수정하세요. 기존 개체를 삭제하려면 DROP을 사용하세요. 주의하세요. 백업을 권장합니다. 삭제되거나 이름이 바뀐 개체에 대한 참조가 없는지 확인하려면 스키마 변경 사항을 확인하세요.

화웨이의 Qiankun ADS3.0 지능형 운전 시스템은 8월에 출시될 예정이며 처음으로 Xiangjie S9에 출시될 예정입니다. 화웨이의 Qiankun ADS3.0 지능형 운전 시스템은 8월에 출시될 예정이며 처음으로 Xiangjie S9에 출시될 예정입니다. Jul 30, 2024 pm 02:17 PM

7월 29일, AITO Wenjie의 400,000번째 신차 출시 행사에 Huawei 전무이사이자 Terminal BG 회장이자 Smart Car Solutions BU 회장인 Yu Chengdong이 참석하여 연설을 했으며 Wenjie 시리즈 모델이 출시될 것이라고 발표했습니다. 올해 출시 예정 지난 8월 Huawei Qiankun ADS 3.0 버전이 출시되었으며, 8월부터 9월까지 순차적으로 업그레이드를 추진할 계획입니다. 8월 6일 출시되는 Xiangjie S9에는 화웨이의 ADS3.0 지능형 운전 시스템이 최초로 탑재됩니다. LiDAR의 도움으로 Huawei Qiankun ADS3.0 버전은 지능형 주행 기능을 크게 향상시키고, 엔드투엔드 통합 기능을 갖추고, GOD(일반 장애물 식별)/PDP(예측)의 새로운 엔드투엔드 아키텍처를 채택합니다. 의사결정 및 제어), 주차공간부터 주차공간까지 스마트 드라이빙의 NCA 기능 제공, CAS3.0 업그레이드

sqlserver 서비스를 시작할 수 없는 경우 수행할 작업 sqlserver 서비스를 시작할 수 없는 경우 수행할 작업 Apr 05, 2024 pm 10:00 PM

SQL Server 서비스가 시작되지 않는 경우 해결해야 할 몇 가지 단계는 다음과 같습니다. 오류 로그를 확인하여 근본 원인을 확인합니다. 서비스 계정에 서비스를 시작할 수 있는 권한이 있는지 확인하세요. 종속성 서비스가 실행 중인지 확인하세요. 바이러스 백신 소프트웨어를 비활성화합니다. SQL Server 설치를 복구합니다. 복구가 작동하지 않으면 SQL Server를 다시 설치하십시오.

sqlserver 포트번호 확인하는 방법 sqlserver 포트번호 확인하는 방법 Apr 05, 2024 pm 09:57 PM

SQL Server 포트 번호를 보려면 SSMS를 열고 서버에 연결합니다. 개체 탐색기에서 서버 이름을 찾아 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 연결 탭에서 TCP 포트 필드를 확인하세요.

sqlserver에서 실수로 삭제한 데이터베이스를 복구하는 방법 sqlserver에서 실수로 삭제한 데이터베이스를 복구하는 방법 Apr 05, 2024 pm 10:39 PM

실수로 SQL Server 데이터베이스를 삭제한 경우 다음 단계를 수행하여 복구할 수 있습니다. 데이터베이스 활동 중지, 데이터베이스 로그 확인, 백업에서 복원, DBCC CHECKDB 사용 파티 도구. 데이터 손실을 방지하려면 데이터베이스를 정기적으로 백업하고 트랜잭션 로깅을 활성화하십시오.

설치에 실패하면 sqlserver를 삭제하는 방법은 무엇입니까? 설치에 실패하면 sqlserver를 삭제하는 방법은 무엇입니까? Apr 05, 2024 pm 11:27 PM

SQL Server 설치가 실패하면 다음 단계에 따라 정리할 수 있습니다. SQL Server 제거 레지스트리 키 삭제 파일 및 폴더 삭제 컴퓨터를 다시 시작합니다.

sqlserver의 영어 설치를 중국어로 변경하는 방법 sqlserver의 영어 설치를 중국어로 변경하는 방법 Apr 05, 2024 pm 10:21 PM

다음 단계에 따라 SQL Server 영어 설치를 중국어로 변경할 수 있습니다. SQL Server 서비스를 중지하고, 인스턴스 언어를 변경하고, 응용 프로그램을 다시 시작합니다.

See all articles