2013-01-03 3 views
1

다음은 필자의 테스트 시나리오입니다.테스트 자동화를 설계하는 방법

명령 줄 실행시 - 많은 값이 db의 다른 테이블에 기록됩니다.

db에는 여러 명령 줄 옵션과 많은 값/테이블이 있습니다. db의 값에 대한 검사를 어떻게 설계해야합니까? 내가 무슨 짓을

지금까지이 -

  • 이이 명령에 대한 매우 구체적인 것 (명령에 특정 쿼리를 실행 dB로 명령

  • 연결을 실행 어떤 테이블을 볼 필요가 있는지)

  • 데이터 세트의 체크는 if dt[row][col]="value i expect"입니다.

여기서 이점은 프레임 워크의 일부로 적은 코드를 작성해야한다는 것입니다. 이 단점은 간소화되지 않은 각 테스트를 개발할 때 더 많은 코드를 작성해야하며 때로는 열 이름이 잘못 나타날 수 있다는 것입니다.

그래서 저는 검사를 합리화하는지 확인하려고합니다. 뭔가 노출 된 속성으로 열이 (테이블에 대한) 클래스를 선언합니다. 이 방법은 내가 잘못 열 이름을 적어도 얻을.

  1. 이것은 가장 간단한 방법입니까 (장기적으로는 더 재사용 가능한 코드를 작성하고 싶습니다). 그렇지 않다면 가장 좋은 방법은 무엇입니까?
  2. DB에서 C# 프로젝트 파일 (클래스/코드)으로 테이블/컬럼 값을 내보내는 쉬운 방법이 있으므로 코드에 모든 것을 다시 넣을 필요가 없습니다.

자세한 내용이 명확하지 않거나 자세한 내용을 자세히 설명하고 싶습니다.

감사합니다.

답변

1

이 문제에 대한 표준 접근 방식을 모르지만 몇 가지 아이디어를 제공 할 것입니다.

보통 나는 컴파일 타임 검사를 이용하기 위해 테이블을 표현하는 클래스를 만들었습니다. 그래서 나는 이것이 좋은 방법이라고 생각합니다. Linq-to-SQL을 살펴 보길 원할 것입니다. 저는 C# 프로젝트에서도 Ruby에서 ActiveRecord를 사용하기도합니다. 왜냐하면이 프로젝트를 사용하여 개발하는 것이 매우 빠르기 때문입니다.

다른 방법으로는 텍스트 파일에서 테스트를 넣을 수 있습니다

Command: 
command to execute 

Expected Data: 
SELECT column FROM table; 
row name, column name, expected data 
row name, column name, expected data 
row name, column name, expected data 

Expected Data: 
SELECT column FROM table; 
row name, column name, expected data 
row name, column name, expected data 

를 다음의로드 및 파일을 구문 분석, 명령을 실행하고 결과를 비교하기 위해 약간의 코드를 작성합니다. 이것은 각 테스트마다 변하는 것들을 제외 할 것이므로 훨씬 나아질 지 모르겠습니다.

또 다른 아이디어는 공통 코드를 기본 클래스로 가져 와서 다양한 코드를 하위 클래스에 보관하는 것입니다. 이 디자인은 템플릿 메서드 패턴을 따릅니다.

class MyTest : CommandLineTest { 
    public String Command() { return "Command to execute"; } 
    public String DataRetrievalCommand() { return "SELECT column FROM table"; } 

    public DataResult[] ExpectedData() { 
    return [ new DataResult("column", "row", "value"), ...]; 
    } 
} 

는 수퍼 클래스는 명령과 값을 얻기 위해 이러한 방법을 사용하지만, 그것은 모든 실제 작업을하고있는 하나가 될 것입니다. 텍스트 파일과 비슷한 개념이지만 테스트 사양은 코드로 유지됩니다.

호프가 도움이되었거나 몇 가지 아이디어가 유입되기를 바랍니다.

+0

답변 해 주셔서 감사합니다. 나는 클래스/속성과 함께 갈 것이라고 생각합니다. 내 자동화의 나머지 부분을 어떻게 설계했는지 알아보십시오. 나는 SQL에 linq 보았다 및 데이터 집합을로드하는 대신 데이터베이스를 쿼리하려면 데이터 레이어를 노출하는 것 같습니다. 그 맞습니까? 또한 C# 속성에 테이블/열을 자동으로 생성하는 다른 방법이 있습니다. 감사. – user393148

+0

Linq-to-SQL에 익숙하지 않습니다. 나는 당신이 데이터베이스 테이블을 대표하는 클래스를 생성 할 것이라고 믿는다. 이러한 클래스는 데이터베이스에 대한 읽기 및 쓰기 메소드를 제공하므로 열 이름이 잘못 입력 될 가능성을 제거해야합니다. –

관련 문제