Seria perfeitamente lógico escrever um teste de unidade separado para correspondência, porque é bastante não trivial.
O código que você mostrou match
é um liner 1 bastante trivial, sem casos extremos complicados, ou é como um exemplo simplificado? Enfim, eu vou assumir que é simplificado ...
Pergunta: qual é o sentido de colocar funções e constantes no espaço para nome anônimo, se as torna inutilizáveis nos testes?
Esta pergunta é o que queria me fazer entrar aqui, já que o Deduplicator já mostrava uma maneira perfeitamente boa de invadir e obter acesso através de #include
truques. Mas a redação aqui faz parecer que testar todos os detalhes internos de implementação de tudo é algum tipo de objetivo final universal, quando está longe disso.
O objetivo dos testes unitários nem sempre é testar todas as micro-unidades granulares internas de funcionalidade. A mesma pergunta se aplica a funções estáticas de escopo de arquivo em C. Você pode até tornar a pergunta mais difícil de responder, perguntando por que os desenvolvedores usam pimpls
em C ++ que exigiria tanto truques friendship
quanto #include
truques na caixa branca, negociando facilmente a testabilidade dos detalhes da implementação para melhorar os tempos de compilação, por exemplo
De um tipo de perspectiva pragmática, pode parecer grosseiro, mas match
pode não ser implementado corretamente com alguns casos extremos que o fazem tropeçar. No entanto, se a única classe externa Foo
, que tem acesso, match
não pode usá-la de maneira a encontrar esses casos extremos, então é bastante irrelevante a correção de Foo
que match
esses casos extremos nunca serão encontrados, a menos Foo
que sejam alterados, nesse momento os testes Foo
falharão e saberemos imediatamente.
Uma mentalidade mais obsessiva, ansiosa por testar todos os detalhes de implementação interna (talvez um software de missão crítica, por exemplo) pode querer entrar e festejar, mas muitas pessoas não acham necessariamente que essa é a melhor ideia, pois isso criaria o testes mais frágeis que se possa imaginar. YMMV. Mas eu só queria abordar a redação desta pergunta, que faz parecer que esse tipo de testabilidade de nível interno de detalhes ultrafinos deve ser um objetivo final, quando mesmo a mentalidade mais rigorosa de teste de unidade pode relaxar um pouco aqui e evite radiografar os internos de todas as classes.
Então, por que as pessoas definem funções em namespaces anônimos em C ++ ou como funções estáticas no escopo de arquivos com ligação interna em C, ocultas do mundo externo? E é isso principalmente: escondê-los do mundo exterior. Isso tem vários efeitos, da redução do tempo de compilação à redução da complexidade (o que não pode ser acessado em outro lugar não pode causar problemas em outro lugar) e assim por diante. Provavelmente, a testabilidade dos detalhes de implementação privada / interna não é a primeira coisa em que as pessoas pensam, por exemplo, reduzindo o tempo de construção e ocultando a complexidade desnecessária do mundo exterior.
foo.cpp
, não o cabeçalho! O OP parece entender muito bem que você não deve colocar nenhum espaço para nome em um cabeçalho.