Udostępnij przez


Weryfikacja ram

Aby ułatwić pisanie testów, taEF udostępnia strukturę "Verify", która korzysta z usługi WexLogger w celu raportowania szczegółowych dzienników z minimalną ilością kodu. Platforma Verify pomaga testom dostarczać dane wyjściowe dziennika strukturalnego — zwraca dziennik zakończony powodzeniem, jeśli dana weryfikacja zakończy się powodzeniem, i wyświetli szczegółowe informacje w przypadku niepowodzenia weryfikacji.

Korzystanie z funkcji Weryfikuj w języku C++

Interfejs API Weryfikacji jest wyświetlany w języku C++ jako zestaw makr zdefiniowanych w pliku nagłówkowym "Verify.h" (Uwaga: nie trzeba jawnie dołączać elementu Verify.h, należy dołączyć element "WexTestClass.h", który zawiera wszystko, czego potrzebujesz do oznaczania testów języka C++ i interakcji z interfejsami API Verify i WexLogger).

Następujące makra weryfikujące są dostępne dla testów w języku C++:

Makro Funkcjonalność
VERIFY_ARE_EQUAL(oczekiwane, rzeczywiste, [komunikat opcjonalny]) Sprawdza, czy dwa określone obiekty są równe. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_ARE_NOT_EQUAL (oczekiwana, rzeczywista, [opcjonalna wiadomość]) Sprawdza, czy dwa określone obiekty nie są równe. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_IS_GREATER_THAN(expectedGreater, expectedLess, [opcjonalny komunikat]) Sprawdza, czy pierwszy parametr jest większy niż drugi parametr. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_IS_GREATER_THAN_OR_EQUAL(expectedGreater, expectedLess, [opcjonalny komunikat]) Sprawdza, czy pierwszy parametr jest większy lub równy drugiemu parametrowi. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_IS_LESS_THAN(expectedLess, expectedGreater, [opcjonalny komunikat]) Sprawdza, czy pierwszy parametr jest mniejszy niż drugi parametr. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_IS_LESS_THAN_OR_EQUAL(expectedLess, expectedGreater, [opcjonalny komunikat]) Sprawdza, czy pierwszy parametr jest mniejszy lub równy drugiemu parametrowi. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_ARE_SAME(oczekiwana, rzeczywista, [opcjonalna wiadomość]) Sprawdza, czy dwa określone parametry odwołują się do tego samego obiektu. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_ARE_NOT_SAME(oczekiwane, rzeczywiste, [komunikat opcjonalny]) Sprawdza, czy dwa określone parametry nie odwołują się do tego samego obiektu. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_FAIL ([wiadomość opcjonalna]) Niepowodzenie bez sprawdzania warunków. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_IS_TRUE(warunek, [komunikat opcjonalny]) Sprawdza, czy określony element logiczny ma wartość true. Zadzwoń VERIFY_IS_TRUE(!! __condition) lub VERIFY_WIN32_BOOL_SUCCEEDED(__condition), aby przetestować wartość logiczną Win32. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_IS_FALSE(warunek, [opcjonalny komunikat]) Sprawdza, czy określony element logiczny ma wartość false. Użyj VERIFY_IS_FALSE(!!__condition) lub VERIFY_WIN32_BOOL_FAILED(__condition) do testowania wartości BOOL w Win32. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_IS_NULL(obiekt, [komunikat opcjonalny]) Sprawdza, czy określony parametr ma wartość NULL. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_IS_NOT_NULL(obiekt, [komunikat opcjonalny]) Sprawdza, czy określony parametr nie ma wartości NULL. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_SUCCEEDED(hresult, [wiadomość opcjonalna]) Sprawdza, czy określony wynik HRESULT jest udany. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_SUCCEEDED_RETURN(hresult, [wiadomość opcjonalna]) Sprawdza, czy określony element HRESULT zakończył się pomyślnie i zwraca wartość HRESULT przekazaną do makra. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_FAILED(hresult, [wiadomość opcjonalna]) Sprawdza, czy określona wartość HRESULT jest nieudana. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_FAILED_RETURN(hresult, [opcjonalna wiadomość]) Sprawdza, czy określona wartość HRESULT nie powiodła się i zwraca wartość HRESULT przekazaną do makra. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_THROWS(operacja, wyjątek, [komunikat opcjonalny]) Sprawdza, czy określona operacja zgłasza dany typ wyjątku. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_NO_THROW(operacja, [opcjonalna wiadomość]) Sprawdza, czy określona operacja nie zgłasza wyjątku. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_WIN32_SUCCEEDED(win32Result, [wiadomość opcjonalna]) Sprawdza, czy określony wynik Win32 zakończył się pomyślnie. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_WIN32_SUCCEEDED_RETURN(win32Result, [wiadomość opcjonalna]) Sprawdza, czy określony wynik Win32 zakończył się pomyślnie i zwraca wartość LONG przekazaną do makra. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_WIN32_FAILED(win32Result, [wiadomość opcjonalna]) Sprawdza, czy określony wynik Win32 zakończył się niepowodzeniem. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_WIN32_FAILED_RETURN(win32Result, [wiadomość opcjonalna]) Sprawdza, czy określony wynik Win32 zakończył się niepowodzeniem i zwraca wartość LONG przekazaną do makra. Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_WIN32_BOOL_SUCCEEDED(win32Bool, [wiadomość opcjonalna]) Sprawdza, czy określona wartość logiczna Win32 powiodła się (!= FALSE). Jeśli weryfikacja zakończy się niepowodzeniem, zarejestruje wynik błędu GetLastError(). Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_WIN32_BOOL_SUCCEEDED_RETURN(win32Bool, [wiadomość opcjonalna]) Sprawdza, czy określony Win32 BOOL jest prawdziwy (!= FALSE) i zwraca ten BOOL, który został przekazany do makra. Jeśli weryfikacja zakończy się niepowodzeniem, zarejestruje wynik błędu GetLastError(). Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_WIN32_BOOL_FAILED(win32Bool, [wiadomość opcjonalna]) Sprawdza, czy określona wartość logiczna Win32 zawiodła (== FALSE). Nie rejestruje wyniku błędu GetLastError(). Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.
VERIFY_WIN32_BOOL_FAILED_RETURN(win32Bool, [wiadomość opcjonalna]) Sprawdza, czy określona wartość logiczna Win32 nie powiodła się (== FALSE) i zwraca wartość logiczną, która została przekazana do makra. Nie rejestruje wyniku błędu GetLastError(). Ponadto rejestruje niestandardowy komunikat, jeśli zostanie podany.

Użycie weryfikacji na podstawie wyjątków

Jeśli kod źródłowy jest kompilowany z włączonymi wyjątkami języka C++ (przez określenie przełącznika wiersza polecenia "/EHsc" lub makra "USE_NATIVE_EH=1" w pliku źródłowym), wówczas makra Verify domyślnie będą rejestrować błąd po awarii, a następnie zgłaszając natywny wyjątek C++. Zgłoszony wyjątek jest WEX::TestExecution::VerifyFailureException. Nie musisz przechwytywać tego wyjątku — struktura TAEF przechwyci go za Ciebie i przejdzie do następnego przypadku testowego.

Opcjonalnie, jeśli chcesz przeprowadzić serię weryfikacji z rzędu, zamiast przerywać test przy pierwszym niepowodzeniu weryfikacji, możesz użyć klasy DisableVerifyExceptions. Okres istnienia obiektu kontroluje czas wyłączenia wyjątków.

if (NULL != m_key)
{
    DisableVerifyExceptions disable;
    VERIFY_WIN32_SUCCEEDED(::RegDeleteKey(HKEY_CURRENT_USER, zTempName));
    VERIFY_WIN32_SUCCEEDED(::RegCloseKey(m_key));
}

W powyższym przykładzie wyjątki są wyłączone tylko w bloku "jeśli (NULL != m_key)" i jeśli pierwsze wywołanie weryfikacji zakończy się niepowodzeniem, drugie wywołanie weryfikacji jest nadal wykonywane.

Klasa DisableVerifyExceptions jest zarządzana przez licznik referencji i działa na zasadzie wątków.

Użycie weryfikacji bez oparcia na wyjątkach

Jeśli kod źródłowy nie jest kompilowany z włączonymi wyjątkami języka C++, makra Weryfikuj nie będą zgłaszać natywnego języka C++ w przypadku niepowodzenia weryfikacji. Ponadto jeśli kod źródłowy jest kompilowany z włączonymi wyjątkami języka C++, ale chcesz wyłączyć opcję Weryfikuj wyjątki, po prostu #define NO_VERIFY_EXCEPTIONS przed dołączeniem "WexTestClass.h".

W tym modelu należy wykonać serię zagnieżdżonych instrukcji if, aby kontrolować przepływ przypadku testowego, zamiast polegać na wyjątkach języka C++.

if (VERIFY_WIN32_SUCCEEDED(::RegDeleteKey(HKEY_CURRENT_USER, zTempName)))
{
    ...
}

Weryfikowanie ustawień danych wyjściowych

Jeśli chcesz dostosować dane wyjściowe generowane przez interfejsy API Verify, możesz użyć klasy SetVerifyOutput . Okres istnienia obiektu kontroluje czas ustawiania ustawień wyjściowych. Klasa SetVerifyOutput jest liczona referencyjnie i działa w oparciu o pojedynczy wątek.

if (NULL != m_key)
{
    SetVerifyOutput verifySettings(VerifyOutputSettings::LogOnlyFailures);
    VERIFY_IS_TRUE(true, L"Should NOT log a comment");
    VERIFY_IS_TRUE(false, L"Should log an error");
}
VERIFY_IS_TRUE(true, L"Should log a comment");

W powyższym przykładzie określone ustawienia odnoszą się tylko do wywołań wykonanych w bloku "if (NULL != m_key)" i tylko wywołanie weryfikacji, które zakończy się niepowodzeniem, zostanie zarejestrowane. Jednak trzecie wywołanie funkcji weryfikacji również zostanie zarejestrowane, mimo że zakończy się powodzeniem. Wynika to z faktu, że klasa SetVerifyOutput wyszła poza zakres.

Istnieją następujące opcje ustawiania wyjściowych danych weryfikacji:

SprawdźUstawieniaWyjścia::TylkoLogowanieBłędów
Rejestrowane będą tylko nieudane wywołania weryfikacji; wszystkie pomyślne wywołania są ignorowane.

VerifyOutputSettings::LogFailuresAsBlocked
Zarejestruj wszystkie błędy jako zablokowane, zamiast rejestrować błąd.

SprawdźUstawieniaWyniku::LogujAwarięJakoOstrzeżenie
Zarejestruj wszystkie błędy jako ostrzeżenia, a nie rejestrowanie błędu.

VerifyOutputSettings::LogValuesOnSuccess
Zarejestruj wartości parametrów przekazanych, nawet jeśli wywołanie Verify powiedzie się.

Sprawdź, czy ustawienia wyjściowe można połączyć przy użyciu operatora alternatywy logicznej (OR), aby włączyć wiele ustawień.

SetVerifyOutput verifySettings(VerifyOutputSettings::LogOnlyFailures | VerifyOutputSettings::LogFailuresAsBlocked);

Generowanie wartości wyjściowych dla typów niestandardowych

Struktura Weryfikacji języka C++ umożliwia generowanie szczegółowych danych wyjściowych dla dowolnego typu niestandardowego. Aby to zrobić, należy zaimplementować specjalizację szablonu klasy WEX::TestExecution::VerifyOutputTraits .

Specjalizacja szablonu klas WEX::TestExecution::VerifyOutputTraits musi istnieć w przestrzeni nazw WEX::TestExecution . Oczekuje się również, że udostępni publiczną metodę statyczną o nazwie ToString, która przyjmuje odwołanie do klasy, i zwraca wartość WEX::Common::NoThrowString zawierającą ciąg reprezentujący jego wartość.

    class MyClass
    {
    public:
        MyClass(int value)
            : m_myValue(value)
        {
        }

        int GetValue()
        {
            return m_myValue;
        }

    private:
        int m_myValue;
    }

    namespace WEX { namespace TestExecution
    {
        template <>
        class VerifyOutputTraits<MyClass>
        {
        public:
            static WEX::Common::NoThrowString ToString(const MyClass& myClass)
            {
                return WEX::Common::NoThrowString().Format(L"%d", myClass.GetValue());
            }
        };
    }}

Zapewnianie komparatorów dla typów niestandardowych

Struktura Weryfikacji języka C++ umożliwia definiowanie komparatorów dla typów niestandardowych, które nie implementują odpowiednich przeciążeń operatorów (operator=, operator< itp.). W tym celu należy zaimplementować specjalizację szablonu klasy WEX::TestExecution::VerifyCompareTraits .

Specjalizacja szablonu klas WEX::TestExecution::VerifyCompareTraits musi istnieć w przestrzeni nazw WEX::TestExecution . Oczekuje się również, że zapewni publiczne metody statyczne o nazwie AreEqual, AreSame, IsLessThan, IsGreaterThan i IsNull.

    class MyClass
    {
    public:
        MyClass(int value)
            : m_myValue(value)
        {
        }

        int GetValue()
        {
            return m_myValue;
        }

    private:
        int m_myValue;
    }

    namespace WEX { namespace TestExecution
    {
        template <>
        class VerifyCompareTraits<MyClass, MyClass>
        {
        public:
            static bool AreEqual(const MyClass& expected, const MyClass& actual)
            {
                return expected.GetValue() == actual.GetValue();
            }

            static bool AreSame(const MyClass& expected, const MyClass& actual)
            {
                return &expected == &actual;
            }

            static bool IsLessThan(const MyClass& expectedLess, const MyClass& expectedGreater)
            {
                return (expectedLess.GetValue() < expectedGreater.GetValue());
            }

            static bool IsGreaterThan(const MyClass& expectedGreater, const MyClass& expectedLess)
            {
                return (expectedGreater.GetValue() > expectedLess.GetValue());
            }

            static bool IsNull(const MyClass& object)
            {
                return object.GetValue() == 0;
            }
        };
    }}

Korzystanie z funkcji Weryfikowanie z poziomu języka C#

Użycie weryfikacji języka C# jest podobne do użycia języka C++. Jednak jest on dostarczany za pośrednictwem WEX. TestExecution.Verify , klasa, która znajduje się w Te.Managed.dll.

Następujące metody Verify są dostępne dla testów języka C#:

Makro Funkcjonalność
AreEqual(oczekiwany obiekt, rzeczywisty obiekt) Sprawdza, czy dwa określone obiekty są równe.
AreEqual(oczekiwany obiekt, rzeczywisty obiekt, komunikat ciągu) Sprawdza, czy dwa określone obiekty są równe; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
AreEqual<T>(T expected, T actual) Sprawdza, czy dwa określone obiekty są równe.
SąRówne<T>(T oczekiwane, T aktualne, string wiadomość) Sprawdza, czy dwa określone obiekty są równe; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
AreNotEqual(oczekiwany obiekt, rzeczywisty obiekt) Sprawdza, czy dwa określone obiekty nie są równe.
AreNotEqual(obiekt oczekiwany, obiekt rzeczywisty, komunikat) Sprawdza, czy dwa określone obiekty nie są równe; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
AreNotEqual<T>(T oczekiwane, T rzeczywiste) Sprawdza, czy dwa określone obiekty nie są równe.
AreNotEqual<T>(T oczekiwany, T rzeczywisty, string message) Sprawdza, czy dwa określone obiekty nie są równe; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
AreSame(oczekiwany obiekt, rzeczywisty obiekt) Sprawdza, czy dwa określone parametry odwołują się do tego samego obiektu.
AreSame(obiekt oczekiwany, obiekt rzeczywisty, komunikat) Sprawdza, czy dwa określone parametry odwołują się do tego samego obiektu; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
AreNotSame(oczekiwany obiekt, rzeczywisty obiekt) Sprawdza, czy dwa określone parametry nie odwołują się do tego samego obiektu.
AreNotSame(obiekt oczekiwany, obiekt rzeczywisty, wiadomość tekstowa) Sprawdza, czy dwa określone parametry nie odwołują się do tego samego obiektu; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
IsGreaterThan(IComparable oczekiwanaWiększa, IComparable oczekiwanaMniejsza) Sprawdza, czy pierwszy parametr jest większy niż drugi parametr.
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess, string message) - Funkcja sprawdza, czy wartość 'expectedGreater' jest większa niż wartość 'expectedLess' i wyświetla wiadomość. Sprawdza, czy pierwszy parametr jest większy niż drugi parametr; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
IsGreaterThanOrEqual(IComparable oczekiwaneWiększe, IComparable oczekiwaneMniejsze) Sprawdza, czy pierwszy parametr jest większy lub równy drugiemu parametrowi.
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess, string message) Sprawdza, czy pierwszy parametr jest większy lub równy drugiemu parametrowi; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
IsLessThan(IComparable oczekiwaneMniejsze, IComparable oczekiwaneWiększe) Sprawdza, czy pierwszy parametr jest mniejszy niż drugi parametr.
IsLessThan(IComparable expectedLess, IComparable expectedGreater, wiadomość ciągu) Sprawdza, czy pierwszy parametr jest mniejszy niż drugi parametr; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater) Sprawdza, czy pierwszy parametr jest mniejszy lub równy drugiemu parametrowi.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater, komunikat typu string) Sprawdza, czy pierwszy parametr jest mniejszy lub równy drugiemu parametrowi; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
Fail(tekstowy komunikat) Niepowodzenie bez sprawdzania warunków.
IsTrue(warunek logiczny) Sprawdza, czy określony warunek jest prawdziwy.
IsTrue(bool warunek, string komunikat) Sprawdza, czy określony warunek jest spełniony; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
IsFalse(warunek bool) Sprawdza, czy określony warunek jest fałszywy.
IsFalse(bool warunek, komunikat typu string) Sprawdza, czy określony warunek jest fałszywy; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
IsNull(object obj) Sprawdza, czy określony parametr ma wartość NULL.
IsNull(object obj, string message) Sprawdza, czy określony parametr ma wartość NULL; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
IsNotNull(object obj) Sprawdza, czy określony parametr nie ma wartości NULL.
IsNotNull(obiekt obj, komunikat ciąg znaków) Sprawdza, czy określony parametr nie ma wartości NULL; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.
Zgłasza operację<T>(VerifyOperation) Sprawdza, czy określona operacja zgłasza dany typ wyjątku. Zwraca również wyjątek do dalszej inspekcji.
Zgłasza operację<T>(VerifyOperation, komunikat ciągu) Sprawdza, czy określona operacja zgłasza dany typ wyjątku; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji. Zwraca również wyjątek do dalszej inspekcji.
NoThrow(Operacja VerifyOperation) Sprawdza, czy określona operacja nie zgłasza wyjątku.
NoThrow(operacja VerifyOperation, komunikat ciągu znaków) Sprawdza, czy określona operacja nie zgłasza wyjątku; rejestruje niestandardowy komunikat dotyczący powodzenia lub niepowodzenia weryfikacji.

Użycie weryfikacji na podstawie wyjątków

Gdy w przypadkach testowych języka C# wystąpi błąd weryfikacji, błąd jest zapisywany w rejestratorze i zgłaszany jest wyjątek WEX.TestExecution.VerifyFailureException. Podobnie jak w natywnym modelu C++, nie musisz martwić się o przechwytywanie tych wyjątków. Struktura TAEF przechwyci go za Ciebie i przejdzie do następnego przypadku testowego.

Opcjonalnie, jeśli chcesz wykonać serię weryfikacji w wierszu, a nie przerwać testu podczas pierwszego niepowodzenia weryfikacji, możesz użyć klasy DisableVerifyExceptions . Okres istnienia obiektu kontroluje czas wyłączenia wyjątków. Klasa DisableVerifyExceptions jest zarządzana poprzez licznik referencji i funkcjonuje w obrębie wątków.

using (new DisableVerifyExceptions())
{
    Verify.AreSame(item1, item2);
    Verify.AreEqual(item1, item2);
}

W powyższym przykładzie, jeśli pierwsze wywołanie weryfikacji nie powiedzie się, drugie wywołanie weryfikacji jest nadal wykonywane.

Alternatywnie możesz osiągnąć ten sam wynik, ustawiając wartość Verify.DisableVerifyExceptions = true przed operacjami Weryfikuj, takimi jak pokazany poniżej.

Verify.DisableVerifyExceptions = true;
try
{
    Verify.AreSame(item1, item2);
    Verify.AreEqual(item1, item2);
}
finally
{
    Verify.DisableVerifyExceptions = false;
}

Należy pamiętać, że mimo że taka opcja jest dostępna, deklarowanie opcji DisableVerifyExeptions jako obiektu w bloku using jest nadal zalecaną opcją.

Jeśli chcesz zatrzymać się w debugerze, gdy wystąpi błąd weryfikacji, wyświetl okno dialogowe wyjątków (Ctrl+Alt+E), kliknij "Dodaj", wybierz opcję "Common Language Runtime Exceptions" z listy rozwijanej i wpisz "WEX.TestExecution.VerifyFailureException" w polu Nazwa.

Weryfikowanie ustawień danych wyjściowych

Jeśli chcesz dostosować dane wyjściowe generowane przez interfejsy API Verify, możesz użyć klasy SetVerifyOutput . Okres istnienia obiektu kontroluje czas ustawiania ustawień wyjściowych. Klasa SetVerifyOutput jest liczona według referencji i działa niezależnie w wątkach.

using (new SetVerifyOutput(VerifyOutputSettings.LogOnlyFailures))
{
    Log.Comment("Only the following error should be logged:");
    Verify.IsTrue(true, "Should NOT log a comment");
    Verify.IsTrue(false, "Should log an error");
}
Verify.IsTrue(true, "Should log a comment");

W powyższym przykładzie należy zarejestrować tylko drugie wywołanie weryfikacji, ponieważ jest to jedyne wywołanie, które kończy się niepowodzeniem w bloku using. Jednak trzecie wywołanie weryfikacji zostanie zarejestrowane, mimo że zakończy się pomyślnie. Wynika to z faktu, że klasa SetVerifyOutput wyszła poza zakres.

Alternatywnie można osiągnąć ten sam wynik, ustawiając wartość Verify.OutputSettings = VerifyOutputSettings.LogOnlyFailures przed operacjami Verify, takimi jak przykład przedstawiony poniżej.

Verify.OutputSettings = VerifyOutputSettings.LogFailuresAsWarnings
try
{
    Verify.AreSame(item1, item2);
    Verify.AreEqual(item1, item2);
}
finally
{
    Verify.OutputSettings = VerifyOutputSettings.None;
}

Należy pamiętać, że mimo że taka opcja jest dostępna, deklarowanie parametru SetVerifyOutput jako obiektu w bloku using jest nadal zalecaną opcją.

Dostępne są następujące opcje konfigurowania wyników weryfikacji:

VerifyOutputSettings.RejestrujTylkoBłędy
Rejestrowane będą tylko nieudane wywołania weryfikacji; wszystkie pomyślne wywołania są ignorowane.

ZweryfikujUstawieniaWyjścia.LogujAwarięJakoZablokowaną
Zarejestruj wszystkie błędy jako zablokowane, zamiast rejestrować błąd.

ZweryfikujUstawieniaWyniku.LogujNiepowodzeniaJakoOstrzeżenia
Zarejestruj wszystkie błędy jako ostrzeżenia, a nie rejestrowanie błędu.

Sprawdź, czy ustawienia danych wyjściowych mogą być połączone operatorem logicznym OR, aby włączyć wiele ustawień.

using (new SetVerifyOutput(VerifyOutputSettings.LogFailuresAsBlocked | VerifyOutputSettings.LogOnlyFailures))
{
...
}

Korzystanie z weryfikacji ze skryptu

Interfejs API Weryfikacji jest również dostępny dla języków skryptów, postępując zgodnie z tymi samymi wzorcami użycia co C++ i C#.

Instalacja

W przypadku korzystania ze skryptowego weryfikowania interfejsu API z poziomu metody testowej TAEF nie jest wymagana instalacja — wymagane interfejsy API są rejestrowane przy użyciu opcji "Rejestracja bezpłatna COM". Aby użyć skryptowalnego interfejsu API spoza metody testowej TAEF (poza TAEF lub w procesie podrzędnym), wystarczy zarejestrować binarium Te.Common.dll przy użyciu regsvr32 z podwyższonego wiersza poleceń; na przykład:

regsvr32 Te.Common.dll

Podczas wdrażania narzędzia TAEF przy użyciu pliku wdrożeniowego do realizacji zadań laboratoryjnych, Te.Common.dll jest automatycznie rejestrowane.

Użytkowanie

Skryptowalne interfejsy API Verify są udostępniane za pośrednictwem klasy 'TE.Common.Verify' COM. Wystarczy utworzyć instancję tej klasy i wywołać jej metody; klasa Verify automatycznie współpracuje z WEXLogger, aby zapisywać weryfikacje zweryfikowane jako sukces i porażka w dzienniku.

1   <?xml version="1.0" ?>
2   <?component error="false" debug="false"?>
3   <package>
4     <component id="Example">
5       <object id="Log" progid="Wex.Logger.Log" />
6       <object id="Verify" progid="Te.Common.Verify" />
7       <reference guid="e65ef678-a232-42a7-8a36-63108d719f31" version="1.0"/>
8       <reference guid="f8bb9db9-e54e-4555-b3e5-e3ddf2fef401" version="1.0"/>
9
10      <public>
11        <method name="HelloWorld"/>
12      </public>
13
14      <script language="JScript">
15          function HelloWorld() {
16              Verify.IsTrue(true);
17              Verify.IsFalse(false);
18          }
19      </script>
20    </component>
21  </package>

W tym przykładzie zdefiniowano klasę testową skryptu TAEF z pojedynczą metodą "HelloWorld". Wiersz 6 używa elementu "object" do zdefiniowania zmiennej Verify w zakresie globalnym. Wiersz 8 używa elementu "reference" do uwzględnienia wszystkich stałych z określonej biblioteki typów (w tym przypadku Te.Common.dllbiblioteki typów) do globalnego zakresu skryptu; w tym przypadku dodaje stałe "VerifySettings". Wiersze 16 i 17 pokazują po prostu użycie interfejsu API Weryfikacji. Po wykonaniu przykład wygeneruje następujące dane wyjściowe:

Test Authoring and Execution Framework v2.7 Build 6.2.7922.0 (fbl_esc_end_dev(mschofie).110202-1000) For x86

StartGroup: Example::HelloWorld
Verify: IsTrue
Verify: IsFalse
EndGroup: Example::HelloWorld [Passed]

Summary: Total=1, Passed=1, Failed=0, Blocked=0, Not Run=0, Skipped=0

Interfejs API weryfikowania skryptów

Metody weryfikacji interfejsu API weryfikacji z możliwością skryptu są następujące:

Metoda Funkcjonalność
bool Verify.AreEqual(oczekiwane, rzeczywiste, [komunikat opcjonalny]) Sprawdza, czy dwie wartości są równe. Jeśli ustawienie "VerifySettings_CoerceTypes" jest włączone, ta metoda używa definicji równości JScript, jeśli ustawienie "VerifySettings_CoerceTypes" nie jest włączone, metoda używa definicji tożsamości JScript. Ustawienie "VerifySettings_CoerceTypes" jest domyślnie włączone.
bool Verify.AreNotEqual(oczekiwane, rzeczywiste, [komunikat opcjonalny]) Sprawdza, czy dwie wartości nie są równe. Jeśli ustawienie "VerifySettings_CoerceTypes" jest włączone, ta metoda używa definicji równości JScript, jeśli ustawienie "VerifySettings_CoerceTypes" nie jest włączone, metoda używa definicji tożsamości JScript. Ustawienie "VerifySettings_CoerceTypes" jest domyślnie włączone.
bool Verify.IsGreaterThan(expectedGreater, expectedLess, [opcjonalny komunikat]) Sprawdza, czy pierwsza wartość jest większa niż druga.
bool Verify.IsGreaterThanOrEqual(expectedGreater, expectedLess, [opcjonalny komunikat]) Sprawdza, czy pierwsza wartość jest większa lub równa drugiej.
bool Verify.IsLessThan(expectedLess, expectedGreater, [opcjonalny komunikat]) Sprawdza, czy pierwsza wartość jest mniejsza niż druga.
bool Verify.IsLessThanOrEqual(expectedLess, expectedGreater, [opcjonalny komunikat]) Sprawdza, czy pierwsza wartość jest mniejsza lub równa drugiej.
bool Verify.AreSame(spodziewane, aktualne, [opcjonalny komunikat]) Sprawdza, czy wartości są takie same.
bool Verify.AreNotSame(oczekiwane, rzeczywiste, [opcjonalny komunikat]) Sprawdza, czy wartości nie są takie same.
bool Verify.Fail([komunikat opcjonalny]) Niepowodzenie bez sprawdzania warunków.
bool Verify.IsTrue(wyrażenie, [komunikat opcjonalny]) Sprawdza, czy podane wyrażenie daje wartość true.
bool Verify.IsFalse(wyrażenie, [komunikat opcjonalny]) Sprawdza, czy podane wyrażenie daje wartość false.
bool Verify.IsNull(oczekiwano, [komunikat opcjonalny]) Sprawdza, czy dana wartość ma wartość null.
bool Verify.IsNotNull(oczekiwane, [komunikat opcjonalny]) Sprawdza, czy dana wartość nie ma wartości null.
bool Verify.Throws(funkcja, [opcjonalny komunikat]) Sprawdza, czy dana funkcja zgłasza wyjątek.
bool Verify.NoThrow(funkcja, [komunikat opcjonalny]) Sprawdza, czy dana funkcja nie zgłasza wyjątków.

W klasie Verify istnieją dwie metody kontrolowania ustawień:

Metoda Funkcjonalność
object Verify.EnableSettings(settings) Zostanie włączona określona flaga lub flagi ustawienia.
object Verify.WyłączUstawienia(settings) Określona flaga ustawienia lub flagi zostaną wyłączone.

Wartość ustawień przekazana do metod Verify.EnableSettings lub Verify.DisableSettings może być dowolną z następujących wartości:

VerifySettings_LogOnlyFailures = 0x01
Rejestrowane są tylko niepowodzenia — nie ma żadnych danych wyjściowych dotyczących pomyślnego wykonania Verify.

VerifySettings_LogFailuresAsBlocked = 0x02
Błędy są rejestrowane jako "Zablokowane" zamiast domyślnego "Błąd".

VerifySettings_LogFailuresAsWarnings = 0x04
Błędy są rejestrowane jako "Ostrzeżenie", zamiast domyślnego "Błąd".

VerifySettings_LogValuesOnSuccess = 0x08
Wartości parametrów przeznaczonych do weryfikacji są zapisywane jako część komunikatu w dzienniku weryfikacji. Jest on domyślnie włączony.

VerifySettings_CoerceTypes = 0x1000
Wartości przekazane do metod Verify będą przymuszane zgodnie z regułami przymuszania JScript. Jest on domyślnie włączony.

VerifySettings_DisableExceptions = 0x2000
Wyjątki nie będą występować w przypadku niepowodzenia walidacji.

Weryfikowanie ustawień

Interfejs API Verify udostępnia ustawienia konfiguracyjne służące do konfigurowania jego zachowania. Metody "EnableSettings" i "DisableSettings" mogą służyć do włączania lub wyłączania określonych ustawień obsługiwanych przez klasę Verify. Metody przyjmują jedno lub więcej ustawień do włączenia lub wyłączenia.

    Verify.EnableSettings(VerifySettings_LogOnlyFailures);

Aby włączyć lub wyłączyć wiele ustawień w jednym wywołaniu, możesz uwzględnić wiele flag "VerifySettings":

    Verify.EnableSettings(VerifySettings_LogOnlyFailures | VerifySettings_DisableExceptions);

Metody EnableSettings i DisableSettings zwracają obiekt, którego można użyć do przywrócenia oryginalnych ustawień, co umożliwia włączenie lub wyłączenie ustawień dla danego zakresu;

1    var guard = Verify.EnableSettings(VerifySettings_LogOnlyFailures);
2    try
3    {
4        Verify.AreEqual(10, 0xa);
5    }
6    finally
7    {
8        guard.Restore();
9    }

W tym przykładzie do metody Verify.EnableSettings przekazywany jest parametr 'VerifySettings_LogOnlyFailures', który zostanie zintegrowany z ustawieniami już obecnymi w obiekcie Verify. Wywołanie Verify jest wykonywane w bloku try-finally, dzięki czemu podczas bloku finally obiekt "guard" może służyć do przywrócenia oryginalnych ustawień.

Użycie weryfikacji na podstawie wyjątków

Domyślnie metody Verify zgłaszają wyjątek w przypadku niepowodzenia weryfikacji. W przypadku uruchomienia w obszarze TAEF, jeśli wyjątek zostanie wyrzucony z metody testowej, test zakończy się niepowodzeniem. Na przykład:

1    var guard = Verify.EnableSettings(VerifySettings_CoerceTypes);
2    try
3    {
4        Verify.AreEqual(1, "1");
5        Verify.AreEqual("1", 1);
6    }
7    finally
8    {
9        guard.Restore();
10   }

W tym przykładzie drugie wywołanie Weryfikacji nigdy nie zostanie wykonane, ponieważ pierwsze zgłosi wyjątek i zakończy się niepowodzeniem testu. Obsługa ustawień interfejsu API Verify może służyć do zmiany tego zachowania, tak aby nieudane weryfikacje nie powodowały błędów, co umożliwi dokonywanie kolejnych wywołań Verify. Jest to szczególnie przydatne w przypadku weryfikowania zestawu parametrów i upewnienia się, że wszystkie weryfikacje zostały zapisane.

1    var guard = Verify.EnableSettings(VerifySettings_CoerceTypes | VerifySettings_DisableExceptions);
2    try
3    {
4        Verify.AreEqual(1, "1");
5        Verify.AreEqual("1", 1);
6    }
7    finally
8    {
9        guard.Restore();
10   }

Ponieważ wyjątki zostały wyłączone, obie weryfikacje zostaną zapisane w dzienniku.

Korzystanie ze skryptowalnego API weryfikacji poza TAEF

Interfejs API do weryfikacji, który można skryptować, może być używany poza modułem TAEF. Upewnij się, że Te.Common.dll jest zarejestrowany, jak opisano w sekcji Instalacja, i po prostu utwórz klasę "TE.Common.Verify".

var VerifySettings_DisableExceptions = 0x2000;

var Verify = new ActiveXObject("TE.Common.Verify");
var Log = new ActiveXObject("WEX.Logger.Log");

Verify.EnableSettings(VerifySettings_DisableExceptions);

Log.StartGroup("Group A");
Verify.AreEqual(1, 2);
Log.EndGroup("Group A");

Log.StartGroup("Group B");
Verify.AreEqual(2, 2);
Log.EndGroup("Group B");

Powyższy kod wygeneruje następujące dane wyjściowe konsoli po wykonaniu za pomocą skryptu cscript:

StartGroup: Group A
Error: Verify: AreEqual - Values (1, 2)
EndGroup: Group A [Failed]

StartGroup: Group B
Verify: AreEqual - Values (2, 2)
EndGroup: Group B [Passed]

Non-passing Tests:

    Group A [Failed]

Summary: Total=2, Passed=1, Failed=1, Blocked=0, Not Run=0, Skipped=0

"WEX.Logger.Log API można użyć do skonfigurowania rejestratora WEX w razie potrzeby (na przykład jako procesu podrzędnego), a interfejs API Verify skryptowalny skorzysta z tej konfiguracji.