我有一个带有多个 viewController 和一个 tabBarController 的故事板应用程序。到目前为止,navigationBar 的标题颜色为白色。现在我正在使用 Xcode 11 beta 6 和 iOS 13 beta 8 进行测试,标题为黑色。在装有 iOS 12 的设备上,标题仍然是白色的。我试图在故事板的导航控制器的导航栏中设置标题颜色。但这没什么区别。我还尝试在每个视图中更改标题颜色,但有时不起作用。在开始使用 iOS 13 进行测试时,我不得不更改我的代码以更改状态栏的背景颜色。代码是这样的:
self.tabBarController.title = NSLocalizedString(@"AppTitle",nil);
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor clearColor];
shadow.shadowOffset = CGSizeMake(0, 1);
[self.navigationController.navigationBar setBarTintColor:COLOR_HEADER_LIGHT];
if (@available(iOS 13, *))
{
UINavigationBarAppearance *navBar = [[UINavigationBarAppearance alloc] init];
navBar.backgroundColor = COLOR_HEADER_LIGHT;
self.navigationController.navigationBar.standardAppearance = navBar;
self.navigationController.navigationBar.scrollEdgeAppearance = navBar;
}
else
{
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = COLOR_HEADER_LIGHT;
}
} …Run Code Online (Sandbox Code Playgroud) 我向控制器添加了一个方法,以从中的JWT令牌获取用户ID HttpContext。在我的单元测试中,nullHttpContext为null,因此出现异常。
我该如何解决这个问题?有没有一种方法来起订量HttpContext?
这是使用户进入我的基本控制器的方法
protected string GetUserId()
{
if (HttpContext.User.Identity is ClaimsIdentity identity)
{
IEnumerable<Claim> claims = identity.Claims;
return claims.ToList()[0].Value;
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
我的一项测试如下所示
[Theory]
[MemberData(nameof(TestCreateUsergroupItemData))]
public async Task TestPostUsergroupItem(Usergroup usergroup)
{
// Arrange
UsergroupController controller = new UsergroupController(context, mapper);
// Act
var controllerResult = await controller.Post(usergroup).ConfigureAwait(false);
// Assert
//....
}
Run Code Online (Sandbox Code Playgroud) 我目前正在对 REST API 进行单元测试。当我有一个列表或自定义对象作为参数时,我遇到了问题。
第一个控制器方法有多个参数,包括字符串列表。我不知道如何添加列表的内联数据中的值。
private static List<string> TestData()
{
var testcase = new List<string>();
testcase.Add("DEV");
testcase.Add("IT");
return testcase;
}
[Theory]
[InlineData(0, 10, TestData, "", 3)]
public async Task TestGetPersonItems(int pageNumber, int pageSize, List<string> departments, string filterText, int resultCount)
{
using (API_DB_Context context = new API_DB_Context(_options))
{
// Arrange
//List<string> departments = new List<string>();
//departments.Add("DEV");
List<string> locations = new List<string>();
PersonenController controller = new PersonenController(context, _mapper);
// Act
var controllerResponse = await controller.Get(pageNumber, pageSize, departments, locations, filterText);
// Assert
if …Run Code Online (Sandbox Code Playgroud) 这是我使用 LINQ 的第一步。我有两个过滤器列表作为参数,也可以为空。如果我以这种方式执行代码,我不会从空列表中返回任何值。
如果要忽略空列表,代码必须是什么样子?
public List<PersonDTO> GetPersons(int pageNumber, int pageSize, List<string> departments, List<string> locations, string filterText)
{
if (filterText == null)
{
filterText = "";
}
List<Person> personsList = _dbContext.Persons
.Where(a => (a.firstName.ToLower().Contains(filterText.ToLower()) || a.lastName.ToLower().Contains(filterText.ToLower()))
&& departments.Contains(a.department)
&& locations.Contains(a.location))
.Skip(pageNumber * pageSize).Take(pageSize).ToList();
return _mapper.Map<List<PersonDTO>>(personsList);
}
Run Code Online (Sandbox Code Playgroud)