Assert jUnit'teki dizelerde bulunur


187

JUnit yazmak için güzel bir yolu var mı

String x = "foo bar";
Assert.assertTrue(x.contains("foo"));

7
IMO bu yeterince güzel, önerilen seçenekler daha az okunabilir
The Godfather

3
@Godfather daha az okunabilir, ancak daha anlamlı onaylama hataları üretir (yani, kabul edilen yanıt dizelerde farkı gösterecektir; burada OPs çözümü, hata durumunda "Beklendiğinde yanlış" gösterecektir)
Mike

Bir iddiayı "daha hoş" yapan şey başarısız olduğunda hata mesajıdır. Kodda ne kadar okunabilir olduğu ikincildir, çünkü başarısız olana kadar koda bakmanıza gerek yoktur ve hata mesajı ilk gördüğünüz şeydir.
rjmunro

Yanıtlar:


291

Hamcrest ve JUnit4'ü eklerseniz şunları yapabilirsiniz:

String x = "foo bar";
Assert.assertThat(x, CoreMatchers.containsString("foo"));

Bazı statik ithalatlarda çok daha iyi görünüyor:

assertThat(x, containsString("foo"));

İhtiyaç duyulan statik ithalat:

import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.containsString;

8
Kullandığınızdan emin olun org.junit.Assertkarşı junit.framework.Assertikincisi olarak hamcrest Matcher yokturassertThat()
Vizyoner Yazılım Çözümleri

15
JUnit 4.10 çalıştırırken, kullanılacak sınıf org.junit.matchers.JUnitMatchers, örneğin: assertThat ("bir şey", JUnitMatchers.containsString ("bazı"));
Ewen Cartwright

1
Başarısızlık için başarısızlık mesajı assertThato zaman çok daha yararlıdırassertTrue
Mike Rylander

3
statik ithalat gerekli import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;- sadece birini beladan kurtarmak için
eis

4
... ve org.hamcrest.Matchers.containsString;en son api'de, hamcrest-librarybağımlılıkta.
eis

13

mümkün olduğunda fest assert 2.0 kullanın EDIT: assertj'in daha fazla iddiası olabilir (çatal)

assertThat(x).contains("foo");

AssertJ.assertThat ile içeren bir yöntem bulamadım. Bunun yerine bulduğum şey bu - org.assertj.core.api.Assertions.assertThat (conversionException) .hasMessageContaining ("bazı alt dize");
Raj

üzgünüm, yukarıdaki yorumumun bu cevabın içeriğine uygun olmadığını düşünüyorum. Ben bir istisna mesajı içinde bir alt dize kontrol etmek gerekir farklı bir kullanım durumunda idi.
Raj

8

Hamcrest Matcher kullanın containsString()

// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));

// Error Message
java.lang.AssertionError:
Expected: a string containing "myName"
     got: "some other name"

İsteğe bağlı olarak daha ayrıntılı bir hata mesajı ekleyebilirsiniz.

// Hamcrest assertion with custom error message
assertThat("my error message", person.getName(), containsString("myName"));

// Error Message
java.lang.AssertionError: my error message
Expected: a string containing "myName"
     got: "some other name"

Yinelenen bir soruya cevabımı burada yayınladım



3

Çok geç, ama sadece güncellemek için aşağıdaki sözdizimi ile yaptım

import org.hamcrest.core.StringContains;
import org.junit.Assert;

Assert.assertThat("this contains test", StringContains.containsString("test"));

2

Başka bir varyant

Assert.assertThat(actual, new Matches(expectedRegex));

Üstelik de org.mockito.internal.matchersdiğer bazı ilginç matchers gibi vardır StartWith, Containsvs.


0

assertj varyantı

import org.assertj.core.api.Assertions;
Assertions.assertThat(actualStr).contains(subStr);

0

Örnek (junit sürümü- 4.13)

import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;

public class TestStr {

@Test
public void testThatStringIsContained(){
    String testStr = "hi,i am a test string";
    assertThat(testStr).contains("test");
 }

}

-1

Bu sayfada birçok cevap denedim, hiçbiri gerçekten işe yaramadı:

  • org.hamcrest.CoreMatchers.containsString derlenmiyor , yöntem çözümlenemiyor.
  • JUnitMatchers.containsString karmaşıktır (ve CoreMatchers.containsString anlamına gelir ).
  • org.hamcrest.Matchers.containsString : NoSuchMethodError

Bu yüzden okunabilir kod yazmak yerine, soruda bahsedilen basit ve uygulanabilir yaklaşımı kullanmaya karar verdim.

Umarım başka bir çözüm ortaya çıkar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.