Pergunta

Sou novo em Pex e Moles.Estou tentando executar o Pex no meu código, mas estou usando injeção de construtor.Existe uma maneira de instruir o Pex sobre como injetar os construtores?

Editar

    public UserLogic(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    public int GetUsersAge(int id)
    {
        User user = _userRepository.GetById(id);
        DateTime DOB = user.DOB;
        DateTime now = DateTime.Today;
        int age = now.Year - DOB.Year;
        if (DOB > now.AddYears(-age)) age--;
        return age;
    }

Preciso injetar um stub userRepository.Pex está falhando com uma NullReferenceException quando _userRepository.GetById(id) é chamado.Tenho usado o Moq para meus testes de unidade, mas quero mudar para pex e moles

Devo usar PexFactories para criar meus stubs?

Foi útil?

Solução

Tente passar um tipo Moles Stub para um teste parametrizado gerado por Pex.Para criar um teste parametrizado, clique com o botão direito na classe que deseja explorar e selecione PEX > Criar teste de unidade parametrizado.Isso gera um método na classe de teste que contém argumentos.Os testes individuais chamam esse teste parametrizado, enviando os argumentos de teste individuais.

Quando o código em teste usa injeção de dependência por meio de argumentos (possui um argumento digitado em interface), o método de teste paramterizado gerado por Pex também conterá o mesmo argumento de tipo de interface.Você pode escrever seus próprios métodos de teste que também chamam o método parametrizado, alimentando-o com seus próprios valores, incluindo o tipo de interface.Apenas certifique-se de não escrevê-los no arquivo gerado pelo Pex!

Também sugiro usar os tipos Mole Stub para suas injeções de teste de unidade.O Manual de referência do Microsoft Moles é um ótimo lugar para começar a aprender como usar Moles em testes unitários.Um tipo de stub moles será criado para sua interface, quando você criar o teste parametrizado.Basta configurar os desvios para o seu tipo de stub e depois passá-lo para o teste parametrizado.

Criar desvios do tipo stub é muito fácil.Sugiro criar um método de configuração no projeto de teste, que configure desvios usados ​​com frequência.Normalmente adiciono um sinalizador de enumeração como argumento para esse método, para que eu possa facilmente dizer quais desvios criar em determinados tipos, tudo em uma chamada.

Enumeração de amostra:

[Flags()]
public enum MoleConfigurations
{
    MoleSqlClientObjects,
    DisableDirectory_Exists,
    DisableEventLogExtensions,
    DisableInitializeDatabaseObjects,
    DisableInitializeThreadingObjects,
    DisableQueueExistingDataFiles,
    DisableConstructor
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top