EDIT Aktuelle Fahrpläne verwenden in der Tat isequal
statt isequaln
. Wir bevorzugen jedoch die Verwendung von isequaln
über isequal
standardmäßig für eine zukünftige Version von MATLAB.
In der Zwischenzeit würde Ihre aktuelle Problemumgehung arbeiten, aber die folgenden beiden Ansätze könnten Sie besser Diagnose erhalten:
zuerst die Fahrpläne in Tabellen konvertieren. Wenn es scheitert, erhalten Sie eine bessere Diagnose, die tatsächlich auf den Teil Ihres Stundenplans zeigt, der fehlschlägt. Dies ermöglicht Ihnen auch, Toleranzen auf die Werte der Fahrpläne anzuwenden. Ein Nachteil, die Diagnose zeigt sie als Tabellen und nicht als das, was sie wirklich sind - Fahrpläne.
>> testCase.verifyEqual(timetable2table(actual), timetable2table(actual));
Interactive verification failed.
---------------------
Framework Diagnostic:
---------------------
verifyEqual failed.
--> Path to failure: <Value>.Data
--> The values are not equal using "isequaln".
--> Failure table:
Index Actual Expected Error RelativeError
_____ ______ ________ _____ _____________
1 50 20 30 1.5
2 50 20 30 1.5
Actual double:
50
50
Expected double:
20
20
Actual Value:
2×2 table
Time Data
____________________ ____
20-Oct-2017 00:00:00 50
21-Oct-2017 00:00:00 50
Expected Value:
2×2 table
Time Data
____________________ ____
20-Oct-2017 00:00:00 20
21-Oct-2017 00:00:00 20
>>
Verwenden verifyReturnsTrue
und rufen Sie direkt isequaln. Dies zeigt zumindest den Funktionsgriff verwendet, um die Werte zu vergleichen, wenn es
testCase.verifyReturnsTrue(@() isequaln(actTimeTable, expTimeTable));
Im verifyReturnsTrue Fall fehlschlägt, wenn Sie immer noch die tatsächlichen und erwarteten Tabellen in Fehlerdiagnose sehen wollen, können Sie sie in geben können als Testdiagnose. Das sieht wie folgt aus:
import matlab.unittest.diagnostics.Diagnostic;
>> testCase.verifyReturnsTrue(@() isequaln(actual, expected),...
Diagnostic.join(actual, expected))
Interactive verification failed.
----------------
Test Diagnostic:
----------------
2×1 timetable
Time Data
____________________ ____
20-Oct-2017 00:00:00 50
21-Oct-2017 00:00:00 50
----------------
Test Diagnostic:
----------------
2×1 timetable
Time Data
____________________ ____
20-Oct-2017 00:00:00 20
21-Oct-2017 00:00:00 20
---------------------
Framework Diagnostic:
---------------------
verifyReturnsTrue failed.
--> The function handle did not evaluate to "true".
--> Returned value:
logical
0
Evaluated Function:
function_handle with value:
@()isequaln(actual,expected)
>>
/EDIT
Je nachdem, was Datentypen Sie arbeiten (und die Freisetzung von MATLAB) verifyEqual
sollten Sie geben, was Sie wollen.
Sind diese Arrays vom Typ double? Wenn dies der Fall ist, sollten verifyEqual
alles sein, was Sie benötigen (und Ihnen bessere Diagnosen als Ihre Problemumgehung geben).
Wenn verifyEqual
nicht funktioniert, können Sie mir wissen, welche Version von MATLAB Sie verwenden und die verifyEqual
Anruf, der nicht das tut, was Sie suchen?
Wie wäre es mit [isequaln] (https://uk.mathworks.com/help/matlab/ref/isequaln.htmll)? – Zep
Oder wenn Sie einen elementweisen Vergleich benötigen: 'a == b | (isnan (a) & isnan (b))' –
@Zep 'isequaln' erzeugt das korrekte Ergebnis über die Befehlszeile. Allerdings muss ich diesen Test in eine Unit-Test-Klasse einbeziehen. Im Moment verwende ich 'verifyEqual', wie' testCase.verifyEqual (actual, expected) '' - Nicht sicher, wie man 'isequaln' einbaut! – Andi