2
나는 Finally 메서드를 이해하지 못한다. 이 상황에서는 발사되지 않습니다.왜 관측 가능하지 않습니까? 마지막으로 전화가 왔습니까?
[TestMethod]
public void FinallyHappensOnError()
{
bool finallyActionHappened = false;
try
{
Observable
.Throw<Unit>(new DivideByZeroException())
.Finally(() => finallyActionHappened = true)
.Subscribe();
}
catch
{
}
Assert.IsTrue(finallyActionHappened);
}
이 방법은 마침내 마침표 대신 마침표를 사용하여 작동합니다. Do not와 함께 작동하는 이유는 모르지만 마침내는 이해할 수 없습니다.
[TestMethod]
public void CanRecordWhenSequenceFinishes()
{
bool sequenceFinished = false;
try
{
Observable.Throw<Unit>(new DivideByZeroException())
.Do(
onError: ex => { sequenceFinished = true; },
onCompleted:() => sequenceFinished = true,
onNext: _ => { })
.Subscribe();
}
catch
{
}
Assert.IsTrue(sequenceFinished);
}
. 무엇과 무엇 사이의 경쟁? 최종 테스트가 끝나기 전에 테스트가 끝났습니까? 지연, 스레드 스케줄러 등이 없기 때문에 이것이 모두 동기식이라고 생각했습니다. – JustinM
실제로 두 번째 코드의 Assert는 적중되지 않습니다. 나는 그것에 브레이크 포인트를 두었고 그것은 일어나지 않았다. – JustinM
오, 나는 혼란 스럽다. 위의 원래 테스트 코드가 실패합니다. 하지만 두 번째 줄의 테스트가'Subject obs = new Subject ();'인 경우 'Subscribe (obs)'로 변경하면 테스트가 통과 될뿐만 아니라 테스트가 Catch 블록에 들어 가지 않습니다. 나는 거기에 브레이크 포인트를 놓고 치는 것이 아니다. –
JustinM