Assert.AreEquivalent Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Sobrecargas
| Nome | Description |
|---|---|
| AreEquivalent<T>(T, T, Boolean, String, String, String) |
Testa se dois grafos de objeto são estruturalmente equivalentes (igualdade profunda) e gera uma exceção se não forem. |
| AreEquivalent<T>(T, T, String, String, String) |
Testa se dois grafos de objeto são estruturalmente equivalentes (igualdade profunda) e gera uma exceção se não forem. |
AreEquivalent<T>(T, T, Boolean, String, String, String)
- Origem:
- Assert.AreEquivalent.cs
Testa se dois grafos de objeto são estruturalmente equivalentes (igualdade profunda) e gera uma exceção se não forem.
public static void AreEquivalent<T>(T? expected, T? actual, bool strict, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : 'T * 'T * bool * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As T, actual As T, strict As Boolean, Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
Parâmetros de tipo
- T
O tipo de valores a serem comparados.
Parâmetros
- expected
- T
O primeiro valor a ser comparado. Esse é o valor esperado pelo teste.
- actual
- T
O segundo valor a ser comparado. Esse é o valor produzido pelo código em teste.
- strict
- Boolean
Quando true, a comparação falhará se actual declarar quaisquer propriedades ou campos públicos que não estejam presentes no expectedtipo de runtime ou se houver chaves de dicionário extras presentes actual. Quando false (o padrão), membros adicionais e chaves actual de dicionário são ignorados.
Quando os tipos de expectedactual runtime são idênticos, esse sinalizador não tem efeito na comparação entre membros públicos, mas ainda rejeita chaves de dicionário extras ao actual comparar dicionários.
- message
- String
A mensagem a ser incluída na exceção quando actual não for equivalente a expected. A mensagem é mostrada nos resultados do teste.
- expectedExpression
- String
A expressão sintactica do esperado, conforme fornecido pelo compilador por meio da expressão de argumento do chamador. Os usuários não devem passar um valor para esse parâmetro.
- actualExpression
- String
A expressão sintactica de real, conforme fornecido pelo compilador por meio da expressão de argumento do chamador. Os usuários não devem passar um valor para esse parâmetro.
Exceções
Gerado se expected e actual não são estruturalmente equivalentes.
Aplica-se a
AreEquivalent<T>(T, T, String, String, String)
- Origem:
- Assert.AreEquivalent.cs
Testa se dois grafos de objeto são estruturalmente equivalentes (igualdade profunda) e gera uma exceção se não forem.
public static void AreEquivalent<T>(T? expected, T? actual, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : 'T * 'T * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As T, actual As T, Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
Parâmetros de tipo
- T
O tipo de valores a serem comparados.
Parâmetros
- expected
- T
O primeiro valor a ser comparado. Esse é o valor esperado pelo teste.
- actual
- T
O segundo valor a ser comparado. Esse é o valor produzido pelo código em teste.
- message
- String
A mensagem a ser incluída na exceção quando actual não for equivalente a expected. A mensagem é mostrada nos resultados do teste.
- expectedExpression
- String
A expressão sintactica do esperado, conforme fornecido pelo compilador por meio da expressão de argumento do chamador. Os usuários não devem passar um valor para esse parâmetro.
- actualExpression
- String
A expressão sintactica de real, conforme fornecido pelo compilador por meio da expressão de argumento do chamador. Os usuários não devem passar um valor para esse parâmetro.
Exceções
Gerado se expected e actual não são estruturalmente equivalentes.
Comentários
Essa asserção executa uma comparação estrutural profunda e sensível à ordem de dois grafos de objeto. Ela difere de , que verifica apenas a equivalência de coleção de nível superior sem levar em conta a ordem do AreEquivalent(ICollection, ICollection)elemento.
As regras de comparação são:
- Valores iguais a referência (incluindo ambos
null) são considerados equivalentes. - Tipos primitivos (numéricos, Boolean, Char, String, enums, DateTime, DateTimeOffset, , TimeSpan, Guid, Uri, , Type) Versionsão comparados com Equals(Object). Em estruturas de destino que os enviam,
DateOnly,TimeOnly,HalfeInt128UInt128também são tratados como primitivos. - Se o tipo estático (tempo de compilação) de um valor for implementado IEquatable<T> para si mesmo, Equals(T) será usado e a recursão será interrompida nesse ponto. Substituições Equals(Object) simples são ignoradas – o comparador sempre se recursa em membros para eles.
- Dicionários (IDictionary, IDictionary<TKey, TValue>ou IReadOnlyDictionary<TKey,TValue>) são comparados por conjunto de chaves, com valores comparados recursivamente. As pesquisas são roteadas por meio do dicionário de origem para que as IEqualityComparer<T> chaves sejam preservadas.
- Outros enumeráveis (excluindo String) são comparados elemento por elemento na ordem de iteração. A comparação diferencia a ordem; se a ordem for irrelevante, use AreEquivalent(ICollection, ICollection) na própria coleção.
- Outros tipos de referência são comparados recursando em todas as propriedades de instância pública (com um getter público e sem parâmetros de índice) e campos de instância pública. Membros estáticos, não públicos e indexados são ignorados.
- Os ciclos de referência são acompanhados e percorridos no máximo uma vez por par (esperado, real). O mesmo mecanismo impõe a topologia do grafo: se a mesma referência de um lado for emparelhada com referências diferentes do outro lado, a asserção falhará.
- Se um acesso de dicionário (
TryGetValueContainsKeyou enumeração) definido Equals(T)pelo usuário ou membro for gerado durante a avaliação, a declaração falhará com uma mensagem que descreve o tipo de exceção e a mensagem. - A comparação é interrompida após uma profundidade de recursão limitada para evitar StackOverflowException em grafos de objeto extraordinariamente profundos e relata essa condição como uma falha de declaração.