assertEquals vs. assertEqual em python

184

Existe uma diferença entre assertEqualse assertEqualno python unittest.TestCase?

E se não houver, por que existem duas funções? Apenas por conveniência?

Janusz
fonte

Respostas:

210

Boa pergunta!

Na verdade, no Python 2.6, ambos assertEquale assertEqualssão aliases de conveniência para failUnlessEqual. A fonte declara-os assim:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

No Python 3 , ao seu ponto, failUnlessEqualé explicitamente reprovado. assertEqualscarrega este comentário :-)

# Sinônimos para métodos de asserção

# Os plurais não são documentados. Mantenha-os dessa maneira para desencorajar o uso.

# Não adicione mais. Não remova.

# Passar por um ciclo de depreciação com isso irritaria muitas pessoas.

Portanto, o resultado parece ser que você deve usar o que quiser no Python 2.x, mas tender assertEqualpara o Python 3.

Jarret Hardie
fonte
34
Na verdade, o comentário sobre plurais é ambíguo. Diz que "os plurais" não são documentados. Sua sentença final indica que você entende isso como nomes de métodos que terminam com 's', como assertEquals. No entanto, gramaticalmente, igual é uma forma singular (terceira pessoa) de um verbo, não um plural. Eu acho que você entendeu corretamente o que o autor dos comentários quis dizer, mas a palavra "plural" está errada.
Larsh
45

Uma atualização 3.3: a partir de 26.3.7.1.1. Aliases preteridos :

Por razões históricas, alguns dos métodos do TestCase tinham um ou mais aliases que foram descontinuados. A tabela a seguir lista os nomes corretos, juntamente com seus aliases obsoletos:

Method Name   | Deprecated alias | Deprecated alias
--------------+------------------+-----------------
assertEqual() | failUnlessEqual  | assertEquals
...
Matthew Cornell
fonte
24

Não apenas para o Python 3.x, pois o Python 2.7 assertEqualstambém foi preterido:

Method Name            | Deprecated alias(es)
_________________________________________________________
assertEqual()          | failUnlessEqual, assertEquals

A partir de 25.3.7.1.1. Aliases preteridos

chungnho
fonte
5

Eu acho que essa foi a tensão entre a "única maneira óbvia de fazer isso" versus "alias para fazer o código geral fluir semanticamente". Pessoalmente, descobri que gosto de ler

failIf(some_condition)

sobre

assertFalse(some_condition)

mas gostei

assertEqual(a, b)

sobre os outros dois ( assertEquals(a, b)incomoda meu senso de gramática).

A "única maneira óbvia de fazê-lo" teve precedência no futuro.

Kathy Van Stone
fonte
3

Não encontro menção de assertEquals em http://docs.python.org/library/unittest.html . No entanto, quando importo o TestCase e, em seguida, faço uma "ajuda (TestCase)", ela é listada. Eu acho que é apenas um sinônimo de conveniência.

Fred Larson
fonte
10
Sim, mas é mal rompe a "apenas uma maneira óbvia de fazer isso" mantra :-(.
Alex Martelli
4
@ Alex - Você não terá nenhum argumento de mim sobre isso.
31511 Fred Larson
0

Sei que não responde à pergunta específica, mas se você chegou aqui enquanto pesquisava:

using deprecated method assertEquals()

Você só precisa alterar a chamada para .assertEqual () (remover os 's' em iguais)

mrmuggles
fonte
-1

É quase o mesmo, exceto que assertEquals é repricado. É recomendável usar assertEqual como aqui:

# Synonyms for assertion methods
# The plurals are undocumented.  Keep them that way to discourage use.
# Do not add more.  Do not remove.
# Going through a deprecation cycle on these would annoy many people.


      assertEquals = assertEqual

Fonte online: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py

Rabhi salim
fonte
1
Tecnicamente, você está certo, mas um dos nomes está obsoleto e o outro não. O código vinculado destina-se a reescrever os nomes reprovados em nomes não reprovados.
Marius Gedminas