Welcome to GASP Sign in | Join | Help

Paulo Morgado

Tudo sobre Arquitectura de Software
PDC2008: Será O Fim Dos Windows Forms?

O PDC deste ano é todo acerca da cloud (núvem – ou nebulosa, como eu lhe chamo) e a .NET Framework 4.0.

Ninguém da Microsoft me disse que os Windows Forms tinham os dias contados (antes pelo contrário) mas, olhando para  lista de sessões do PDC deste ano, só vejo WPF.

Portanto, a questão mantem-se: Será o fim dos Windows Forms?

Lançamento Do Typemock Isolator 5.1

Esta versão adiciona o suporte para métodos estáticos e metódos não públicos à API AAA. Vejam as notas de lançamento.

Não me agrada muito a aproximação reflectiva ao teste de membros privados.

Com as novas adicões à API AAA, testar esta classe:

public class MyClass
{
    public string Public()
    {
        return this.Private();
    }

    private string Private()
    {
        throw new NotImplementedException();
    }
}

pode ser feito assim:

[TestMethod]
[Isolated]
public void PrivateTest()
{
    MyClass fake = Isolate.Fake.Instance<MyClass>();

    Isolate.WhenCalled(() => fake.Public()).CallOriginal();

    Isolate.NonPublic.WhenCalled(fake, "Private").WillReturn("FAKE");

    string fakePublic = fake.Public();

    Assert.AreEqual("FAKE", fakePublic);

    Isolate.Verify.WasCalledWithExactArguments(() => fake.Public());

    Isolate.Verify.NonPublic.WasCalled(fake, "Private");
}

Agradava-me mais que fosse assim:

[TestMethod]
[Isolated]
public void PrivateTest()
{
    MyClass fake = Isolate.Fake.Instance<MyClass>();

    MyClass_Accessor fakeAccessor = MyClass_Accessor.AttachShadow(fake);

    Isolate.WhenCalled(() => fakeAccessor.Private()).WillReturn("FAKE");

    Isolate.WhenCalled(() => fake.Public()).CallOriginal();

    string fakePublic = fake.Public();

    Assert.AreEqual("FAKE", fakePublic);

    Isolate.Verify.WasCalledWithExactArguments(() => fake.Public());

    Isolate.Verify.WasCalledWithExactArguments(() => fakeAccessor.Private());
}

Parece a mesma coisa mas não há nomes de métodos no código de teste.

Eles conseguiram fazê-lo para os Natural Mocks. Certamente que o conseguirão fazer para AAA.

Forjando Parâmetros De Saída Com Typemock Isolator

Há algum tempo perguntaram-me se seria possível forjar parâmetros de saída usando o Typemock Isolator.

Na verdade é muito fácil de o fazer usand qualquer uma das APIs disponíveis.

Dada esta classe:

public class MyClass
{
    public bool MyMethod(string input, out int output1, out double output2)
    {
        throw new NotImplementedException();
    }
}

Usando a nova API AAA, é tão limpo omo:

[TestMethod]
[Isolated]
public void TestMethodIsolated()
{
    MyClass target = Isolate.Fake.Instance<MyClass>();

    string input = "test value";
    int expectedOutput1 = 1;
    double expectedOutput2 = 2;

    Isolate.WhenCalled(() => target.MyMethod(input, out expectedOutput1, out expectedOutput2)).WillReturn(true);

    int output1;
    double output2;
    bool result = target.MyMethod(input, out output1, out output2);

    Assert.IsTrue(result);
    Assert.AreEqual<int>(expectedOutput1, output1);
    Assert.AreEqual<double>(expectedOutput2, output2);
}

Usando Natural Mocks, é tão fácil como:

[TestMethod]
[VerifyMocks]
public void TestMethodNatural()
{
    MyClass target = RecorderManager.CreateMockedObject<MyClass>();

    string input = "test value";
    int expectedOutput1 = 1;
    double expectedOutput2 = 2;

    using (RecordExpectations recorder = RecorderManager.StartRecording())
    {
        recorder.ExpectAndReturn(target.MyMethod(input, out expectedOutput1, out expectedOutput2), true);
    }

    int output1;
    double output2;
    bool result = target.MyMethod(input, out output1, out output2);

    Assert.IsTrue(result);
    Assert.AreEqual<int>(expectedOutput1, output1);
    Assert.AreEqual<double>(expectedOutput2, output2);
}

Também é possível usando Reflective Mocks:

[TestMethod]
[VerifyMocks]
public void TestMethodReflective()
{
    MockObject<MyClass> targetMock = MockManager.MockObject<MyClass>();

    string input = "test value";
    int expectedOutput1 = 1;
    double expectedOutput2 = 2;

    targetMock.ExpectAndReturn(
        "MyMethod",
        new DynamicReturnValue(delegate(object[] parameters, object context)
            {
                parameters[1] = expectedOutput1;
                parameters[2] = expectedOutput2;
                return true;
            }));

    int output1;
    double output2;
    bool result = targetMock.Object.MyMethod(input, out output1, out output2);

    Assert.IsTrue(result);
    Assert.AreEqual<int>(expectedOutput1, output1);
    Assert.AreEqual<double>(expectedOutput2, output2);
}

Só é preciso escolher a API de que se gosta mais.

SAPO Codebits 2008

O SAPO Codebits 2008 está aí. Inscrevam-se.

Tech·Ed EMEA 2008 Developers: Meet Me In Barcelona

Mais uma vez estarei numa banca ATE no Tech·Ed EMEA 2008 Developers.

tal como já tinha dito acerca do PDC, o que gosto mais destes eventos é a convivência com as pessoas da Microsoft e com os outros participantes. Portanto, se se quiserem encontrar comigo, terei muito gosto em encontrar-me convosco.

Livro LINQ Com C#

O Luís acabou de dar a notícia acerca do nosso livro sobre LINQ com C#.

Foi com enorme honra que aceitei o convite do Luís para escrever este livro para a FCA, para quem ele já tinha publicado alguns livros [^] [^] [^].

Este será um livro de introdução em Português dirigido a quem quiser aprender LINQ com C#.

Tem sido um projecto divertido com grandes discuções (possíveis apenas porque meio oceano nos separa :) ).

PDC2008: Encontramo-nos Em Los Angeles

Não é a primeira vez que tento mas, por uma razão ou outra, esta é a primeira vez que vou ao PDC (Microsoft’s Professional Developers Conference).

De acordo com o sítio do evento, “O PDC é projectado para arquitectos de software e programadores avançados. Se estão interessados no futuro da plataforma Microsoft, se são responsáveis pela estratégia tecnológica a vossa organização ou se são profissionais altamente qualificados que gostam de mergulhar o coração da plataforma, então o PDC é para vós!”. Se se revêm nesta descrição, não percam tempo e registem-se. O desconto Early Bird foi extendido até 8 de Setembro.

O que gosto mais destes eventos é a convivência com as pessoas da Microsoft e com os outros participantes. Portanto, se se quiserem encontrar comigo, terei muito gosto em encontrar-me convosco.

Pakua FeedCenter: Novo Agregador De Conteúdos Técnicos Da Comunidade Microsoft

Se proucuram conteúdos técnicos em Português sobre tecnologias Microsoft, visitem o Pakua FeedCenter.

Clone Detective Para Visual Studio

Clone Detective for Visual Studio

O Clone Detective é uma ferramenta que integra com o Visual Studio e usa o ConQAT (Continuous Quality Assessment Toolkit) para analizar projectos C# e procurar código fonte duplicado.

Vejam os vídeos e vejam se esta é a ferramenta que procuravam.

Oferta De Desconto Para A Comunidade Na Subscrição Da E-Reference Library

A Microsoft Press criou  um URL exclusivo para um desconto na subscrição da E-Reference Library para os MVPs passarem à comunidade, sem quaisquer limitações ou restrições.

Para criar uma subscrição experimental, deve ser usado o URL Experimental (http://microsofteref2.books24x7.com/promo.asp?ref=mvptry).

Qualquer membro da comunidade que subscreva a E-Reference Libraries através do URL de Subscrição (http://microsofteref2.books24x7.com/promo.asp?ref=mvpbuy) terá direito a um desconto de 40% numa subscrição de um ano.

Esta oferta termina a 30 de Setembro de 2008.

Saiu O StyleCop 4.3

A equiopa do StyleCop anunciou a saída da versão 4.3 da ferramenta StyleCop. Podem obtê-la aqui.

Esta versão contem algumas correcções de erros, novas regras e documentação.

Também nesta versão, a lista de erros e avisos vai para a janela Errors List como acontece com os compiladores. Gostava que os erros e avisos também fossem para a janela Output.

A documentação do SDK para o desenvolvimento de regras próprias e integração com outros sistemas de build é esperada para breve.

O Lutz Roeder’s .NET Reflector É Agora O Red Gate’s .NET Reflector

Convenhamos, quem não conhece o .NET Reflector não pode afirmar que desenvolve em .NET.

Hoje, a Red Gate anunciou a aquisição do Lutz Roeder’s .NET Reflector.

Na nova página do .NET Reflector, a Red Gate afirma que “continuará a manter uma versão gratuita para o benefício da comunidade”.

Podem ler a entrevista com Lutz Roeder e James Moore (director geral de ferramentas de desenvolvimento .NET da Red Gate) na simple-talk.

O James ainda não sabe como melhorar o Reflector, mas eu sei. O Reflector necessita de importantes melhoramentos ao nível da usabilidade da interface com o utilizador. Vejamos se consigo arranjar uma lista:

  • Para mim, a pesquisa enquanto se digita não é uma boa ideia tal como está no Reflector.
  • Ainda no tema da pesquisa, pesquisa enquanto se digita já seria uma boa ideia para a janela de código.
  • Não consigo perceber porque mudar alguma opção dispara um refrescamento total da aplicação perdendo-se a janela de código.
  • Definições como a formatação de código, documentação ou números deveria ser possível apenas com o simples premir de um botão numa barra de botões.

Tenho a certeza que a Red Gate é mais do que capaz de tomar bem conta do .NET Reflector.

Saiu A Alfa Do Typemock Racer

A Typemock lançou uma versão alfa do seu mais recente produto: Typemock Racer.

O Typemock Racer é a ferramenta que usa análise dinâmica e estática para encontrar bloqueios em código .NET que tinha sido anuncianda pelo Roy Osherove.

Saiu o Typemock Isolator 5.0 Com A Sua Nova API AAA

A Typemock lançou a versão 5.0 da sua ferramenta de testes unitários: Isolator. Vejam as notas de lançamento.

Esta mais recente versão vem com a nova API: Arrange Act Assert (Preparar – Executar - Validar):

Devo dizer que gostava mais de Isolator do que Isolate.

Também novidade nesta versão é a inclusão do ficheiro de ajuda no pacote de instalação.

VHD Resizer: Ferramenta Para Redimensionar Ficheiros VHD

Enquanto instalava o SQL Server 2008 numa máquina virtual Virtual PC, fiquei sem espaço no disco virtual.

Pesquisei e encontrei esta ferramenta: VHD Resizer. É necessário registo para descarregar a ferramenta.

More Posts Next page »