2017-11-13 4 views
1

Ich war neugierig auf gab es eine Möglichkeit für mich, ein Repository impl mit autoverschalteten Kandidaten mit einer Anwendung main() (zu Testzwecken) laufen zu lassen.Ich versuche, Repository impl mit autowired Kandidaten zum Testen zu laufen

Ich weiß, das Problem ist, dass die Repo-Klasse, die das Haupt enthält, nicht in der main() -Methode verdrahtet wird, was dazu führt, dass keiner der autowired Kandidaten verdrahtet wird, aber ich habe Schwierigkeiten, die Syntax zu finden Dies geschieht.

Das Code-Snippet Probe ist unten, sowie Kommentare in dem Abschnitt, wo ich das Problem bin Begegnung mit

@Repository 
@Transactional 
public class RepositoryImpl implements Repository { 

    @Autowired 
    JdbcTemplate jdbcTemplate; 

    String query = "some query" 

    @Override 
    public boolean runQuery() { 
     Object[] params = {param1, param2}; 
     boolean result = jdbcTemplate.queryForObject(query , params, Integer.class) == 1; 
     return result; 
    } 

    //included just for testing purposes 
    public static void main(String[] args) { 
     /*this is where i would like to run runQuery() to see a sample output 
     * something like this: 
     * repositoryImpl = new RepositoryImpl(); 
     * syso(repositoryImpl.runQuery()); 
     */ 
    } 
} 

ich in einen Null-Zeiger laufen, die von jdbc Vorlage kommt nicht richtig verdrahtet werden. Könnte mir jemand sagen, wie man eine Klasse mit einer eigenständigen Anwendung main() autowire?

Ist das überhaupt möglich?

Danke für Ihre Hilfe!

+0

Sind Sie sicher, dass Ihre Abfrage etwas zurückgibt, nehme ich an, dass Sie hier eine NullPointerException erhalten 'jdbcTemplate.queryForObject (query, params, Integer.class)' also bitte zeigen Sie uns weitere Details, damit wir Ihnen –

+0

helfen können Integers mit '.equals()' not '==' –

+0

leider ist das einzige, was der Stacktrace zeigt mir 'java.lang.NullPointerException: null' und die Problem-Zeile ist in der Tat ' jdbcTemplate.queryForObject (Abfrage, Parameter , Integer.class) ' –

Antwort

1

Sie können nicht einfach für statische Methode autowire (little hack).

Der einfachste Weg, etwas zu testen ... einen Test schreiben;)

@RunWith(SpringJUnit4ClassRunner.class) 
public class RepositoryImplTest { 

    @Autowired 
    private Repository repository; 

    @Test 
    public void testJob() throws Exception { 
     //when 
     boolean val = repository.runQuery(); 

     Assert.assertTrue(val); 
    } 
} 

prüfen Unit Testing section aus.

+0

danke für den hilfreichen Tipp mit der Problemumgehung! –

+0

@malhanniazi Wenn dies Ihnen helfen, müssen Sie die Antwort lesen lesen [Wie funktioniert die Annahme einer Antwort funktionieren?] (Https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

Verwandte Themen