단위 테스트의 경우 const 변수의 값을 변경하는 hackish 방법이 있습니까?

TheWaterProgrammer

const 값이 .NET으로 선언 된 C ++ 11 헤더가 있습니다 my_const_value. 그리고 GetValueconst 값을 사용하여 복잡한 논리를 실행하고 예상 값을 반환하는 함수가 있습니다.

GetValue다른 값 으로 단위 테스트하고 싶습니다 my_const_value.

나는 이것이 바람직하지 않다는 것을 알고 있지만에 대한 단위 테스트를 작성하기 위해 다른 값으로 GetValue테스트 GetValue하고 싶습니다 my_const_value. const라도 const 값을 변경하는 C ++에서 해킹 같은 방법이 있습니까?

//MyHeader.hpp
namespace myheader {

const int my_const_value = 5;

int GetValue() {
    // In real-world, lets say below line of code is a complex logic that needs to be tested by a unit test
    return /my_const_value * 5) / 25;
}

}

#include "MyHeader.hpp"
#include <gtest/gtest.h>

TEST(MyHeaderTest, Testing_Something) {
    EXPECT_EQ(1, myheader::GetValue()); // This is okay

    // I want to test that in the future is the value of my_const_value changes to something else then 
    // myheader::GetValue returns the expected result. But of course, I cannot change my_const_value because it is a const.
    // Is there a way to hack around this for a unit test? Is there a way that I could still hack and change the value of my_const_value?
    myheader::my_const_value = 25;
    EXPECT_EQ(5, myheader::GetValue());
}

const_cast my_const_valuenon_const 변수를 사용할 수 있다는 것을 알고 있습니다. 하지만 여기서는 도움이되지 않습니다. my_const_value포인터 등을 사용하여 값을 변경하는 해킹이 있으면 내 질문에 답할 수 있습니다.

t.niese

나는 당신이 const를 버리는 방법을 찾고 있다는 것을 알고 있지만 아마도 다른 방법으로 갈 것입니다.

당신은 당신의 코멘트에서 말한다 :

잘. 나는 내 이유를 제시했다. 에서 논리를 테스트하고 GetValue있습니다. 나는 my_const_valuea로 선언 const했지만 5미래에 누군가가 가치를 바꾸면 미래에 다른 것으로 바뀔 수 있습니다 .

변수가 const함수에 전달되지 않고 함수 내 표현에 참여하는 경우 이러한 변경은 일반적으로 정기적으로 발생하지 않아야하며 예상되지 않아야합니다. myheader::my_const_value구성 값 을 고려하면 언제든지 변경 될 수있는 구성 값이 익스프레션에서 사용되는 함수로 전달되어야합니다.

그래서 테스트의 관점에서 나는 idclev 463035818 이 대답에서 제안 하는 것에 동의합니다. 프로 미터 를 사용하여 테스트 가능한 부분과 상수를 사용하는 부분으로 두 부분으로 기능을 분할하는 것입니다.

코드가 현재 어떻게 동작해야하는지 테스트하는 테스트 하나

TEST(MyHeaderTest, Testing_Something1) {
    EXPECT_EQ(5, myheader::my_const_value)
    EXPECT_EQ(1, myheader::GetValue());
    
}

그리고 일반 테스트 용 :

TEST(MyHeaderTest, Testing_Something2) {
    EXPECT_EQ(1, myheader::GetValue_impl(5));
    EXPECT_EQ(5, myheader::GetValue_impl(25));
    // …
}

그렇게하면 계산이 GetValue작동하는지 일반 테스트를 할 수 있습니다 . 그리고 현재 버전의 코드에 대한 값이 myheader::GetValue()예상되는 이면 하나입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

단위 테스트에서 상수 값을 변경하는 방법은 무엇입니까?

분류에서Dev

하나의 셀로 여러 수식을 변경할 수 있도록 수식이 단일 셀 값을 참조하도록하는 방법이 있습니까?

분류에서Dev

위치를 변경하지 않고 객체 배열의 항목을 변경하는 방법이 있습니까?

분류에서Dev

마우스 오버시 매트 체크 박스의 스타일을 변경하는 방법이 있습니까?

분류에서Dev

함수에 의해 변수 값을 변경하면 Lua에서 상위 테이블의 변수 값이 변경되는 이유는 무엇입니까?

분류에서Dev

OS X의 'say'명령이 단어를 발음하는 방법을 어떻게 변경할 수 있습니까?

분류에서Dev

단위 테스트에서 $ watch 값을 변경하는 방법은 무엇입니까?

분류에서Dev

tkcalendar의 색상을 변경하는 방법이 있습니까?

분류에서Dev

fn : path ()의 반환 값을 변경하는 방법이 있습니까?

분류에서Dev

변수의 값이 변경된시기를 찾는 방법이 있습니까?

분류에서Dev

Python : 함수 재정의가 오류가 아닌 이유는 무엇입니까? 그 기능을 갖는 hackish 방법이 있습니까?

분류에서Dev

검색 할 때 웹 사이트 아래의 단락을 변경하는 방법이 있습니까?

분류에서Dev

플로팅을 위해 데이터 프레임의 인덱스를 변경하는 방법이 있습니까?

분류에서Dev

C ++에서 하나의 변수가 비어있는 경우 다른 변수를 인쇄하는 간단한 방법이 있습니까?

분류에서Dev

ASCII 값을 변경하여 변수의 값을 변경하는 방법은 무엇입니까?

분류에서Dev

2 단어 대 3 단어 인 경우 사람의 이름을 반환하기 위해 Excel에서 if 문을 사용하는 방법이 있습니까?

분류에서Dev

const 인 경우 배열을 변경하는 방법은 무엇입니까?

분류에서Dev

객체의 값 변경을 감지하고 변경된 값의 키를 얻기 위해 어떤 이벤트를 사용할 수 있습니까?

분류에서Dev

C ++ 단순 IF 절은 정적 const char 변수의 값을 변경합니다.

분류에서Dev

TFS의 테스트 케이스에서 MTM을 사용하는 단위 테스트 방법의 테스트 방법으로 매개 변수 값을 전달하는 방법은 무엇입니까?

분류에서Dev

할당 할 새 값이 자바 스크립트의 사전 정의 된 조건을 충족하는 경우에만 값을 변경할 수있는 변수를 어떻게 만들 수 있습니까?

분류에서Dev

Windows 레지스트리 키 / 값의 변경 날짜를 볼 수있는 방법이 있습니까?

분류에서Dev

텍스트를 변경하기 위해 파일의 위치를 탭하는 방법이 있습니까?

분류에서Dev

변수에 반응 구성 요소가 값으로있는 경우 mocha / chai / sinon을 사용하여 단위 테스트를 어떻게합니까?

분류에서Dev

변경 방법을 사용하여 DropDownList의 선택한 값을 어떻게 변경할 수 있습니까?

분류에서Dev

자동 파일 이름 변경-const 변수가 값을 변경하고 있습니까?

분류에서Dev

코드 테스트를 위해 환경 변수에서 응용 프로그램을 격리하는 방법이 있습니까?

분류에서Dev

jQuery 변수 값의 변경을 제한하는 방법은 무엇입니까?

분류에서Dev

$ SHELL 변수의 값을 변경하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    단위 테스트에서 상수 값을 변경하는 방법은 무엇입니까?

  2. 2

    하나의 셀로 여러 수식을 변경할 수 있도록 수식이 단일 셀 값을 참조하도록하는 방법이 있습니까?

  3. 3

    위치를 변경하지 않고 객체 배열의 항목을 변경하는 방법이 있습니까?

  4. 4

    마우스 오버시 매트 체크 박스의 스타일을 변경하는 방법이 있습니까?

  5. 5

    함수에 의해 변수 값을 변경하면 Lua에서 상위 테이블의 변수 값이 변경되는 이유는 무엇입니까?

  6. 6

    OS X의 'say'명령이 단어를 발음하는 방법을 어떻게 변경할 수 있습니까?

  7. 7

    단위 테스트에서 $ watch 값을 변경하는 방법은 무엇입니까?

  8. 8

    tkcalendar의 색상을 변경하는 방법이 있습니까?

  9. 9

    fn : path ()의 반환 값을 변경하는 방법이 있습니까?

  10. 10

    변수의 값이 변경된시기를 찾는 방법이 있습니까?

  11. 11

    Python : 함수 재정의가 오류가 아닌 이유는 무엇입니까? 그 기능을 갖는 hackish 방법이 있습니까?

  12. 12

    검색 할 때 웹 사이트 아래의 단락을 변경하는 방법이 있습니까?

  13. 13

    플로팅을 위해 데이터 프레임의 인덱스를 변경하는 방법이 있습니까?

  14. 14

    C ++에서 하나의 변수가 비어있는 경우 다른 변수를 인쇄하는 간단한 방법이 있습니까?

  15. 15

    ASCII 값을 변경하여 변수의 값을 변경하는 방법은 무엇입니까?

  16. 16

    2 단어 대 3 단어 인 경우 사람의 이름을 반환하기 위해 Excel에서 if 문을 사용하는 방법이 있습니까?

  17. 17

    const 인 경우 배열을 변경하는 방법은 무엇입니까?

  18. 18

    객체의 값 변경을 감지하고 변경된 값의 키를 얻기 위해 어떤 이벤트를 사용할 수 있습니까?

  19. 19

    C ++ 단순 IF 절은 정적 const char 변수의 값을 변경합니다.

  20. 20

    TFS의 테스트 케이스에서 MTM을 사용하는 단위 테스트 방법의 테스트 방법으로 매개 변수 값을 전달하는 방법은 무엇입니까?

  21. 21

    할당 할 새 값이 자바 스크립트의 사전 정의 된 조건을 충족하는 경우에만 값을 변경할 수있는 변수를 어떻게 만들 수 있습니까?

  22. 22

    Windows 레지스트리 키 / 값의 변경 날짜를 볼 수있는 방법이 있습니까?

  23. 23

    텍스트를 변경하기 위해 파일의 위치를 탭하는 방법이 있습니까?

  24. 24

    변수에 반응 구성 요소가 값으로있는 경우 mocha / chai / sinon을 사용하여 단위 테스트를 어떻게합니까?

  25. 25

    변경 방법을 사용하여 DropDownList의 선택한 값을 어떻게 변경할 수 있습니까?

  26. 26

    자동 파일 이름 변경-const 변수가 값을 변경하고 있습니까?

  27. 27

    코드 테스트를 위해 환경 변수에서 응용 프로그램을 격리하는 방법이 있습니까?

  28. 28

    jQuery 변수 값의 변경을 제한하는 방법은 무엇입니까?

  29. 29

    $ SHELL 변수의 값을 변경하는 방법은 무엇입니까?

뜨겁다태그

보관