Pregunta

He hecho la escritura de código en la fuerza de ventas y con el fin de liberar las pruebas de unidad tiene que cubrir al menos 75% .

Lo que yo estoy enfrentando es que el classOne que los métodos de llamadas classTwo también tienen a la unidad de prueba de oclusión de classTwo dentro ClassOne a pesar de que se realiza en el archivo ya classTwo.

Archivo MyClassTwo

 public with sharing class ClassTwo {

    public String method1() {
        return 'one';
    }

    public String method2() {
        return 'two';
    }

    public static testMethod void testMethod1() {

        ClassTwo two = new ClassTwo();
        String out = two.method1();
        system.assertEquals(out, 'one'); //valid    
    }

    public static testMethod void testMethod2() {
        ClassTwo two = new ClassTwo();
        String out = two.method2();
        system.assertEquals(out, 'two'); // valid
    }

}

MyClassOne Archivo

 public with sharing class ClassOne {

    public String callClassTwo() {
        ClassTwo foo = new ClassTwo();
        String something = foo.method1();

        return something;
    }

    public static testMethod void testCallClassTwo() {
        ClassOne one = new ClassOne();
        String out = one.callClassTwo();

        system.assertEquals(out, 'one');
    }
}

El resultado de la prueba MyClassOne no volvería cobertura de la prueba 100%, ya que dice que no he cubierto MyClassTwo metodo2 () parte interior del archivo MyClassOne.

Pero ya escribió prueba de la unidad de MyClassTwo interior del archivo MyClassTwo como se puede ver.

Así que quiere decir esto que tengo que copiar y pegar la unidad de prueba en el expediente MyClassTwo a MyClassOne?

Si lo hace, me da una cobertura del 100%, pero esto parece muy molesto y ridículo. Tener misma prueba en Clase A ni ClassB ....? Estoy haciendo mal o se trata de la forma?

Una vez dicho, ¿es posible crear objeto de burla en la fuerza de ventas? No tengo figura cómo todavía ..

http://sites.force.com/answers/ideaView?c=09a30000000D9xt&id=087300000007m3fAAA&returnUrl=/apex/ideaList%3Fc%3D09a30000000D9xt%26category%3DApex%2B%2526%2BVisualforce% 26P% 3D19% 26sort% 3Dpopular

UDPATE

Me re-escribió el código y actualiza anterior, esta vez para la prueba ClassOne seguro de que no volvería al 100% a pesar de que no está llamando metodo2 classTwo ()

¿Fue útil?

Solución

Comentarios acerca de las bibliotecas simulacros de Java no son muy útiles en Salesforce mundo;) En mis proyectos en los que por lo general dirigidas para la fabricación de nuestros propios datos de prueba en el método de ensayo, llamando a la funcionalidad real, comprobación de los resultados ... y el marco de la prueba en su conjunto lado de la fuerza de ventas es responsable de la reversión de la transacción (por lo que no hay datos de prueba se guarda en base de datos, al final, independientemente de si la prueba ha fallado o se pasa).

En fin ...

Masato, sus clases no compilan (ámbito de clase fuera de métodos, public String hello() sin ninguna cadena devuelta) ... Después me fijo que simplemente haga clic en el MyClassA -> Force.com -> ejecutar pruebas y dieron cobertura de código completa sin ningún problema por lo que el problema debe estar en algún otro sitio ...

Así es como se ve: http://dl.dropbox.com/u /709568/stackoverflow/masato_code_coverage.png

Estoy tratando de pensar en lo que podría haber ido mal ... ¿estás seguro de todas las clases compilan y se guardan en el lado del servidor? ¿Se puso en métodos de ensayo mismas clases como la funcionalidad o en juegos independientes (por lo general hago nombre de la clase separada con nombre similar como MyClassATest). Si se trata de una clase separada - en el que se hizo clic en el archivo "ejecutar pruebas"? Por último, pero no menos importante - si estás frente a este problema durante el despliegue de la caja de arena para la producción, asegúrese de que ha seleccionado todas las clases que necesita del asistente de despliegue?

Otros consejos

Si realmente desea probar "unidad", que debe probar el comportamiento de la clase B y el comportamiento de la clase A, burlándose de la llamada al método de clase B.

Esto es una conversación dura entre los amantes de simulacros y otros (Martin Fowler creo que no es un "burlador").

De todos modos. Usted debe dejar de pensar en una cobertura del 100%. Usted debe pensar en:

  • ¿Por qué estoy probando?

  • ¿Cómo lo estoy probando?

Aquí, sin duda ir a por 2 pruebas:

  • Una de las pruebas para la clase B en el archivo de prueba b clase para asegurarse de que el método B está bien implementado, con todos los efectos secundarios, los valores secundarios, etc.

  • una prueba para la clase A burlarse de la clase B

¿Qué es una maqueta?

Para estancia muy simple: Una maqueta es una porción de código en su prueba, que es a decir: cuando se llama al método de la clase B, siempre devuelven este valor:. "+++"

Al hacer esto, usted se permite tener un conjunto de pruebas maintanable y modulable.

En Java, AMO Mockito: http://mockito.org/

A pesar de que uno de mis colegas es mantenedor de plomo para EasyMock: http://easymock.org/

Espero que esto ayude. Pregúnteme si necesita más ayuda.

editar algunos Ejemplo

Con Java y Mockito:

public class aUTest {

    protected A a;

    @Mock protected B b;

    @Before
    public void setUp(){
        MockitoAnnotations.initMocks(this);
        a = new A();
        ReflectionTestUtils.setField(a, "b", b);
    }

        @Test
    public void test_A_method_should_not_throw_exception()
            when(b. execute()).thenReturn(true); //just an example of a return value from b. execute()
            Boolean result = a.testHello();

        // Assert
        Assert.assertEquals(true, result);
    }

He creado una clase llamada Apex TestHelper para todos mis objetos simulados. Yo uso constantes (static final) para los valores que podría necesitar en otros lugares y campos estáticos públicos para los objetos. Funciona muy bien y ya no se utilizan métodos, no se necesita cobertura de la prueba.

public without sharing class TestHelper {
public static final string testPRODUCTNAME = 'test Product Name';
public static final string testCOMPANYID = '2508'; 

public static Account testAccount {
    get{
        Account tAccount = new Account(
            Name = 'Test Account',
            BillingStreet = '123 Main St',
            BillingCity = 'Dallas',
            BillingState = 'TX',
            BillingPostalCode = '75234',
            Website = 'http://www.google.com',
            Phone = '222 345 4567',                
            Subscription_Start_Date__c = system.today(),
            Subscription_End_Date__c = system.today().addDays(30),
            Number_Of_Seats__c = 1,
            companyId__c = testCOMPANYID,
            ZProduct_Name__c = testPRODUCTNAME);      
        insert tAccount;
        return tAccount; 
    }
}

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top