Ruby Koans : 동일한 값을 가진 두 개의 다른 주사위 세트를 테스트합니다.

니코 Z.

저는 Ruby Koans (Ruby의 튜토리얼 프로젝트)를 진행하고 있습니다. 에서 About_Dice_Project ,라는 이름의 클래스 만들 요구 것 DiceSet을 . 성공했지만 흥미로운 질문이 있습니다.

코드는 다음과 같습니다.

class DiceSet

  # Attribute reader
  attr_reader :values

  # Initializer
  def initialize
    @values = []
  end

  # Roll method
  def roll(dice_amount)
    @values = Array.new(dice_amount) { rand(1..6) }
  end
end

이 테스트는 흥미 롭습니다.

def test_dice_values_should_change_between_rolls
    dice = DiceSet.new

    dice.roll(5)
    first_time = dice.values

    dice.roll(5)
    second_time = dice.values

    assert_not_equal first_time, second_time,
      "Two rolls should not be equal"
  end

그것에 대해 생각하십시오 :

롤이 무작위이면 두 개의 연속 롤이 같을 가능성이 있습니다 (가능성은 아님). 이것을 테스트하는 더 좋은 방법은 무엇입니까?

내 생각은 테스트하는 것입니다 OBJECT_ID 의를 first_time하고 second_time사용 assert_not_equal first_time.object_id, second_time.object_id. 작동하지만 내가 맞습니까? 루비와 프로그래밍의 초보자로서 object_id참으로 무엇입니까? 그건 그렇고, 마크 다운의 텍스트를 정당화 할 수 있습니까?

어떤 도움을 주시면 감사하겠습니다!

에릭 두미 닐

object_ids 및 같음

object_ids를 비교해서는 안되지만 s를 비교해야합니다 value.

a = [1, 2, 3]
b = [1, 2, 3]

puts a == b
#=> true
puts a.object_id == b.object_id
#=> false

object_ids 를 비교함으로써 변수가 정확히 동일한 객체를 참조하는지 테스트합니다. 귀하의 경우에는, first_timesecond_time가 같은 객체를 참조 할 수 있도록, 서로 독립적으로 만들어집니다. 하지만 동일한 값을 가질 수 있습니다.

생각 해봐

두 개의 연속 된 롤이 같지 않도록하는 한 가지 방법은 while루프 를 사용하는 것입니다 .

class DiceSet
  # Attribute reader
  attr_reader :values

  # Initializer
  def initialize
    @values = []
    @last_values = []
  end

  # Roll method
  def roll(dice_amount)
    while @values == @last_values
      @values = Array.new(dice_amount) { rand(1..6) }
    end
    @last_values = @values
    @values
  end
end

dice = DiceSet.new

dice.roll(5)
first_time = dice.values

dice.roll(5)
second_time = dice.values # <-- cannot be equal to first_time

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

추론은 동일한 이름을 가진 두 개의 다른 변수를 보여주고 있습니까?

분류에서Dev

Python을 사용하여 동일한 수의 열이지만 다른 헤더를 가진 두 개의 csv 파일을 결합해야합니다.

분류에서Dev

정확히 동일한 사용법을 가진 두 개의 다른 클래스 세트에 적용 할 디자인 패턴

분류에서Dev

Oracle SQL : CASE 문에서 동일한 별칭을 사용하여 한 경우에 하나의 열, 다른 두 개의 열 및 동일한 별칭을 가진 다른 세 개를 선택합니다.

분류에서Dev

QTP : 동일한 값을 가진 두 변수의 다른 길이

분류에서Dev

다른 데이터 세트의 동일한 개인에 대한 두 가지 다른 ID 값

분류에서Dev

동일한 버튼에 대해 서로 다른 기능을 가진 두 개의 개별 클릭 이벤트?

분류에서Dev

Shapiro Wilk 테스트에서 동일한 결과를 가진 두 개의 다른 샘플

분류에서Dev

두 개의 데이터 세트를 하나로 결합하고 열에 대해 동일한 속성을 가진 행의 평균을 얻습니다.

분류에서Dev

두 개의 다른 HashMap을 사용하여 동일한 Integer 값을 확인할 때 false를 반환합니다.

분류에서Dev

동일한 제출 ID를 가진 페이지의 서로 다른 두 위치에 두 개의 텍스트 HTML 텍스트 입력

분류에서Dev

MySQL은 여러 테이블을 사용하여 서로 다른 조건에서 동일한 데이터의 두 가지 다른 개수를 생성합니다.

분류에서Dev

동일한 PL / SQL 함수가 두 개의 다른 값을 반환합니다.

분류에서Dev

동일한 키를 가진 두 개의 다른 배열을 하나의 배열로 병합

분류에서Dev

두 개의 다른 LuaScript에서 동일한 이름을 가진 두 함수를로드하는 LuaJ

분류에서Dev

동일한 WHERE 절을 가진 두 개의 다른 테이블에서 SELECT?

분류에서Dev

두 개의 다른 사인파가 동일한 출력을 생성합니까?

분류에서Dev

두 문자열의 길이가 주어지면 두 문자열이 동일한 지 테스트합니다.

분류에서Dev

SqlLocalDB 정보는 동일한 이름을 가진 두 개의 인스턴스를 나열합니다.

분류에서Dev

동일한 클래스를 가진 텍스트 상자의 값을 합산하고 jquery를 사용하여 다른 텍스트 상자에 넣는 방법

분류에서Dev

시드 가능한 두 개의 주어진 값 사이에서 임의의 정수를 가져옵니다.

분류에서Dev

Python 클래스의 두 필드가 mypy를 사용하여 주어진 기본 클래스의 동일한 하위 클래스인지 확인합니다.

분류에서Dev

서로 다른 시간을 가진 두 개의 유사한 날짜 일치

분류에서Dev

유사한 열하지만 서로 다른 값을 가진 두 개의 테이블을 조인

분류에서Dev

동일한 IP 주소를 가진 두 개의 Virtualbox 시스템

분류에서Dev

동일한 줄에서 데이터베이스 값을 얻기 위해 두 개의 forloop를 결합합니다.

분류에서Dev

동일한 키로 두 개의 사전을 병합하지만 다른 값으로 추가 (대체 아님)

분류에서Dev

파이썬에서 동일한 값을 가진 두 개의 다른 문자열 객체

분류에서Dev

두 테이블을 결합하고 두 개의 다른 행에서 동일한 값을 가진 테이블 생성

Related 관련 기사

  1. 1

    추론은 동일한 이름을 가진 두 개의 다른 변수를 보여주고 있습니까?

  2. 2

    Python을 사용하여 동일한 수의 열이지만 다른 헤더를 가진 두 개의 csv 파일을 결합해야합니다.

  3. 3

    정확히 동일한 사용법을 가진 두 개의 다른 클래스 세트에 적용 할 디자인 패턴

  4. 4

    Oracle SQL : CASE 문에서 동일한 별칭을 사용하여 한 경우에 하나의 열, 다른 두 개의 열 및 동일한 별칭을 가진 다른 세 개를 선택합니다.

  5. 5

    QTP : 동일한 값을 가진 두 변수의 다른 길이

  6. 6

    다른 데이터 세트의 동일한 개인에 대한 두 가지 다른 ID 값

  7. 7

    동일한 버튼에 대해 서로 다른 기능을 가진 두 개의 개별 클릭 이벤트?

  8. 8

    Shapiro Wilk 테스트에서 동일한 결과를 가진 두 개의 다른 샘플

  9. 9

    두 개의 데이터 세트를 하나로 결합하고 열에 대해 동일한 속성을 가진 행의 평균을 얻습니다.

  10. 10

    두 개의 다른 HashMap을 사용하여 동일한 Integer 값을 확인할 때 false를 반환합니다.

  11. 11

    동일한 제출 ID를 가진 페이지의 서로 다른 두 위치에 두 개의 텍스트 HTML 텍스트 입력

  12. 12

    MySQL은 여러 테이블을 사용하여 서로 다른 조건에서 동일한 데이터의 두 가지 다른 개수를 생성합니다.

  13. 13

    동일한 PL / SQL 함수가 두 개의 다른 값을 반환합니다.

  14. 14

    동일한 키를 가진 두 개의 다른 배열을 하나의 배열로 병합

  15. 15

    두 개의 다른 LuaScript에서 동일한 이름을 가진 두 함수를로드하는 LuaJ

  16. 16

    동일한 WHERE 절을 가진 두 개의 다른 테이블에서 SELECT?

  17. 17

    두 개의 다른 사인파가 동일한 출력을 생성합니까?

  18. 18

    두 문자열의 길이가 주어지면 두 문자열이 동일한 지 테스트합니다.

  19. 19

    SqlLocalDB 정보는 동일한 이름을 가진 두 개의 인스턴스를 나열합니다.

  20. 20

    동일한 클래스를 가진 텍스트 상자의 값을 합산하고 jquery를 사용하여 다른 텍스트 상자에 넣는 방법

  21. 21

    시드 가능한 두 개의 주어진 값 사이에서 임의의 정수를 가져옵니다.

  22. 22

    Python 클래스의 두 필드가 mypy를 사용하여 주어진 기본 클래스의 동일한 하위 클래스인지 확인합니다.

  23. 23

    서로 다른 시간을 가진 두 개의 유사한 날짜 일치

  24. 24

    유사한 열하지만 서로 다른 값을 가진 두 개의 테이블을 조인

  25. 25

    동일한 IP 주소를 가진 두 개의 Virtualbox 시스템

  26. 26

    동일한 줄에서 데이터베이스 값을 얻기 위해 두 개의 forloop를 결합합니다.

  27. 27

    동일한 키로 두 개의 사전을 병합하지만 다른 값으로 추가 (대체 아님)

  28. 28

    파이썬에서 동일한 값을 가진 두 개의 다른 문자열 객체

  29. 29

    두 테이블을 결합하고 두 개의 다른 행에서 동일한 값을 가진 테이블 생성

뜨겁다태그

보관