我有一个@Service,我试图在单元测试中嘲笑它,但到目前为止我得到了一个空值。在应用程序类中,我指定什么是scanBasePackages。我必须用不同的方式来做这件事吗?谢谢。
这是我的服务类,它实现了一个接口:
@Service
public class DeviceService implements DeviceServiceDao {
private List<Device> devices;
@Override
public List<Device> getDevices(long homeId) {
return devices;
}
}
这是我的单元测试。
public class SmartHomeControllerTest {
private RestTemplate restTemplate = new RestTemplate();
private static final String BASE_URL = “..”;
@Mock
private DeviceService deviceService;
@Test
public void getHomeRegisteredDevices() throws Exception {
Device activeDevice = new DeviceBuilder()
.getActiveDevice(true)
.getName("Alexa")
.getDeviceId(1)
.getHomeId(1)
.build();
Device inativeDevice = new DeviceBuilder()
.getInactiveDevice(false)
.getName("Heater")
.getDeviceId(2)
.getHomeId(1)
.build();
UriComponentsBuilder builder = UriComponentsBuilder
.fromUriString(BASE_URL + "/1/devices");
List response = restTemplate.getForObject(builder.toUriString(), List.class);
verify(deviceService, times(1)).getDevices(1);
verifyNoMoreInteractions(deviceService);
}
我弄明白了,我正在使用Mockito并用它来注释我的测试类。这使我能够模拟我试图使用的服务类。
@RunWith(MockitoJUnitRunner.class)
public class SmartHomeControllerTest {..
@Mock
private DeviceService deviceService;
}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = NotificationApplication.class)
public class EmailClientImplTest {
...
}
还可以在
/src/test/resources/application中添加所需的属性/配置。yml
祝你好运
如果要在测试执行期间加载和使用Spring上下文,必须使用Spring测试运行程序
您没有指定任何运行程序,因此它默认使用测试API的运行程序。这里可能是JUnit或TestNG(运行程序的使用取决于指定的@Test
注释)
此外,根据测试的逻辑,您希望调用“真正的”REST服务:
List response = restTemplate.getForObject(builder.toUriString(),
List.class);
为了实现它,您应该加载Spring上下文,并通过使用@SpringBootTest
注释测试来加载Spring Boot容器。
如果使用Spring Boot上下文,要在Spring上下文中模拟依赖关系,不能使用Mockito提供的@mock
,而是Spring Boot提供的@MockBean
<为了理解两者之间的区别,你可以参考这个问题。
请注意,如果您使用的是@SpringBootTest
注释,TestRestTemplate
将自动可用,并可以自动连接到测试中<但是要小心,这是容错的。它可能是合适的或不适合根据您的测试。
因此,您的代码可以看起来像:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class SmartHomeControllerTest {
private static final String BASE_URL = “..”;
@Autowired
private TestRestTemplate restTemplate;
@MockBean
private DeviceService deviceService;
@Test
public void getHomeRegisteredDevices() throws Exception {
...
}
作为补充说明,避免使用原始类型作为列表
,而应使用泛型类型。
问题内容: 我正在尝试为我的项目编写一个单元测试,但是它不允许我使用配置管理器。现在我的项目像 ASP.Net应用程序(所有aspx页) ProjectCore(所有C#文件-模型) ProjectTest(所有测试) 在我的ProjectCore中,我可以从System.Configuration访问ConfigurationManager对象,并将信息传递到项目中。但是,当我运行涉及Confi
当我构建我的解决方案(包括一个单元测试项目)时,我收到了这个错误。 此项目引用了此计算机上缺少的NuGet包。使用NuGet Package Restore下载它们。有关详细信息,请参见http://go.microsoft.com/fwlink/?LinkID=322105.缺少的文件是..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTes
我有一个处理jwt创建的类: 并从resources文件夹中的属性文件中获取jwtSecret和jwtExpirationInMs。 我的单元测试如下所示:
我在pycharm中调试单元测试时遇到问题。我可以使用我的配置很好地运行它们,但当我运行调试器时,会得到以下错误输出: 我的目录结构是: 我的unittest配置是: 看起来像: 做什么?如何确保在调试期间找到它?问题实际上与正在查找的文件/目录无关吗?
我有一个非常简单的rest控制器: 记录器依赖项通过以下配置注入:
我正在尝试为一个现有的应用程序编写单元测试用例,该应用程序有多个模块,每个模块中都有主类。有多个类具有\@SpringBootApplication。我写了一个简单的测试用例,它失败了,错误如下。我如何继续我的测试用例中的一个。 java.lang.IllegalStateException:在文件[C:\My Data\Workspace\Services2\MicroServices\Repo