RefCell in tests

불변 &self 안에서 기록용 상태만 바꾼다

Messenger::send의 시그니처는 그대로 두고, MockMessenger 내부의 호출 기록만 RefCell로 런타임 대여합니다.

컴파일 거절

Vec<String> 직접 보관

&self 뒤의 sent_messagespush하려 하면 가변 대여가 필요해 E0596이 납니다.

런타임 검사

RefCell<Vec<String>>

외부에서는 여전히 불변 참조처럼 보이지만, borrow_mut가 짧은 가변 접근을 열어 기록을 남깁니다.

테스트가 관찰하는 흐름

set_value(80)

75% 이상 조건이 되어 경고 전송 경로가 실행됩니다.

send(&self)

트레이트 계약 때문에 목 객체도 불변 참조로 호출됩니다.

borrow_mut()

기록 벡터에 대한 단독 가변 대여를 런타임에 확인합니다.

push(msg)

전송 대신 메시지를 저장해 테스트가 볼 수 있는 흔적을 남깁니다.

borrow().len()

단언에서는 불변 대여로 기록 개수를 확인합니다.

경계선

RefCell은 트레이트 API를 우회하는 장치가 아니라, 같은 대여 규칙을 실행 중에 검사하도록 미루는 장치입니다. 그래서 테스트는 유연해지지만 잘못 겹친 대여는 패닉으로 드러납니다.