Guava ma bogaty zestaw testów dla wdrożeń zbiórki pisanych w JUnit3 które wyglądają jak:Jak zbudować konfigurowalny zestaw testów JUnit4?
/*
* Copyright (C) 2008 The Guava Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
public class CollectionRemoveTester<E> extends AbstractTester<E> {
@CollectionFeature.Require(SUPPORTS_REMOVE)
@CollectionSize.Require(absent = ZERO)
public void testRemove_present() {
...
}
}
a następnie różne zbiory są testowane za pomocą TestSuiteBuilder
s, które przechodzą w zestawie cech i generatorów do rodzaju zbiórki, a szkielet silnie refleksyjny identyfikuje zestaw metod testowych do uruchomienia.
Chciałbym zbudować coś podobnego w JUnit4, ale nie jest dla mnie jasne, jak sobie z tym poradzić: budowa własnego Runner
? Teorie? Mój najlepszy przypuszczenie tak daleko jest napisać coś podobnego
abstract class AbstractCollectionTest<E> {
abstract Collection<E> create(E... elements);
abstract Set<Feature> features();
@Test
public void removePresentValue() {
Assume.assumeTrue(features().contains(SUPPORTS_REMOVE));
...
}
}
@RunWith(JUnit4.class)
class MyListImplTest<E> extends AbstractCollectionTest<E> {
// fill in abstract methods
}
Ogólne pytanie jest coś takiego: Jak w JUnit4, mogę zbudować zestaw testów dla typu interfejsu, a następnie zastosować te testy do indywidualnych wdrożeń?
Podoba mi się Twoje podejście, utrzymywanie klasy testowej w prostocie. Klasa @Category lub Sparametryzowana również tutaj nie pasuje. Ponieważ problem polega na odkryciu, czy metoda jest implementowana przez jego implementację, co można zrobić poprzez refleksję tylko wtedy, gdy kod implementacyjny ma jakąś demarkację, inne proste podejście to takie, które zrobiłeś. Klasa testowa określa (poprzez cechy), które metody mają być testowane. Aby go jeszcze bardziej uprościć, możesz eksplorować Dataproviders i może nie potrzebować wielu konkretnych klas testowych, takich jak MyListImplTest i Dataprovider. HTH –