Skip to content

Commit af1c935

Browse files
authored
增加 NSNull 的单元测试案例 (#777)
增加模型转字典 Date -> String 的示例代码
1 parent b50e9b5 commit af1c935

File tree

6 files changed

+109
-18
lines changed

6 files changed

+109
-18
lines changed

MJExtensionDemo.xcodeproj/project.pbxproj

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
/* Begin PBXBuildFile section */
1010
0130EE80233C56D8008D2386 /* MJFrenchUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0130EE7F233C56D8008D2386 /* MJFrenchUser.m */; };
11+
01F28187248F64ED008775BA /* MJCat.m in Sources */ = {isa = PBXBuildFile; fileRef = 01F28186248F64ED008775BA /* MJCat.m */; };
1112
2D2DB9CD2317DA07005A689E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D2DB9CC2317DA07005A689E /* AppDelegate.m */; };
1213
2D2DB9D02317DA07005A689E /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D2DB9CF2317DA07005A689E /* ViewController.m */; };
1314
2D2DB9D32317DA07005A689E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2D2DB9D12317DA07005A689E /* Main.storyboard */; };
@@ -86,6 +87,8 @@
8687
/* Begin PBXFileReference section */
8788
0130EE7E233C56D8008D2386 /* MJFrenchUser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MJFrenchUser.h; sourceTree = "<group>"; };
8889
0130EE7F233C56D8008D2386 /* MJFrenchUser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MJFrenchUser.m; sourceTree = "<group>"; };
90+
01F28185248F64ED008775BA /* MJCat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MJCat.h; sourceTree = "<group>"; };
91+
01F28186248F64ED008775BA /* MJCat.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MJCat.m; sourceTree = "<group>"; };
8992
2D2DB9C82317DA07005A689E /* MJExtensionDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MJExtensionDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
9093
2D2DB9CB2317DA07005A689E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
9194
2D2DB9CC2317DA07005A689E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@@ -254,30 +257,32 @@
254257
2D2DBA5F2317DBDF005A689E /* Model */ = {
255258
isa = PBXGroup;
256259
children = (
257-
2D2DBA602317DBDF005A689E /* MJDog.m */,
258-
2D2DBA612317DBDF005A689E /* MJBaseObject.h */,
259-
2D2DBA622317DBDF005A689E /* MJStatus.h */,
260260
2D2DBA632317DBDF005A689E /* MJAd.h */,
261-
2D2DBA642317DBDF005A689E /* MJStatusResult.h */,
262-
2D2DBA652317DBDF005A689E /* MJBox.m */,
263-
2D2DBA662317DBDF005A689E /* MJStudent.m */,
264-
2D2DBA672317DBDF005A689E /* MJUser.h */,
265-
2D2DBA682317DBDF005A689E /* MJPerson.h */,
266-
2D2DBA692317DBDF005A689E /* MJBook.m */,
261+
2D2DBA732317DBDF005A689E /* MJAd.m */,
262+
2D2DBA742317DBDF005A689E /* MJBag.h */,
267263
2D2DBA6A2317DBDF005A689E /* MJBag.m */,
268-
2D2DBA6B2317DBDF005A689E /* MJExtensionConfig.h */,
264+
2D2DBA612317DBDF005A689E /* MJBaseObject.h */,
269265
2D2DBA6C2317DBDF005A689E /* MJBaseObject.m */,
270-
2D2DBA6D2317DBDF005A689E /* MJDog.h */,
271-
2D2DBA6E2317DBDF005A689E /* MJUser.m */,
272-
2D2DBA6F2317DBDF005A689E /* MJStudent.h */,
266+
2D2DBA762317DBDF005A689E /* MJBook.h */,
267+
2D2DBA692317DBDF005A689E /* MJBook.m */,
273268
2D2DBA702317DBDF005A689E /* MJBox.h */,
274-
2D2DBA712317DBDF005A689E /* MJStatusResult.m */,
275-
2D2DBA722317DBDF005A689E /* MJStatus.m */,
276-
2D2DBA732317DBDF005A689E /* MJAd.m */,
277-
2D2DBA742317DBDF005A689E /* MJBag.h */,
269+
2D2DBA652317DBDF005A689E /* MJBox.m */,
270+
01F28185248F64ED008775BA /* MJCat.h */,
271+
01F28186248F64ED008775BA /* MJCat.m */,
272+
2D2DBA6D2317DBDF005A689E /* MJDog.h */,
273+
2D2DBA602317DBDF005A689E /* MJDog.m */,
274+
2D2DBA6B2317DBDF005A689E /* MJExtensionConfig.h */,
278275
2D2DBA752317DBDF005A689E /* MJExtensionConfig.m */,
279-
2D2DBA762317DBDF005A689E /* MJBook.h */,
276+
2D2DBA682317DBDF005A689E /* MJPerson.h */,
280277
2D2DBA772317DBDF005A689E /* MJPerson.m */,
278+
2D2DBA622317DBDF005A689E /* MJStatus.h */,
279+
2D2DBA722317DBDF005A689E /* MJStatus.m */,
280+
2D2DBA642317DBDF005A689E /* MJStatusResult.h */,
281+
2D2DBA712317DBDF005A689E /* MJStatusResult.m */,
282+
2D2DBA662317DBDF005A689E /* MJStudent.m */,
283+
2D2DBA6F2317DBDF005A689E /* MJStudent.h */,
284+
2D2DBA672317DBDF005A689E /* MJUser.h */,
285+
2D2DBA6E2317DBDF005A689E /* MJUser.m */,
281286
0130EE7E233C56D8008D2386 /* MJFrenchUser.h */,
282287
0130EE7F233C56D8008D2386 /* MJFrenchUser.m */,
283288
);
@@ -469,6 +474,7 @@
469474
2D2DBA832317DBE0005A689E /* MJAd.m in Sources */,
470475
2D2DBA802317DBE0005A689E /* MJUser.m in Sources */,
471476
0130EE80233C56D8008D2386 /* MJFrenchUser.m in Sources */,
477+
01F28187248F64ED008775BA /* MJCat.m in Sources */,
472478
2D2DBA852317DBE0005A689E /* MJPerson.m in Sources */,
473479
2D2DBA7B2317DBE0005A689E /* MJBox.m in Sources */,
474480
2D2DBA582317DBB9005A689E /* MJExtensionTests.m in Sources */,

MJExtensionTests/MJExtensionTests.m

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#import "MJBox.h"
1919
#import <CoreData/CoreData.h>
2020
#import "MJFrenchUser.h"
21+
#import "MJCat.h"
2122

2223
@interface MJExtensionTests : XCTestCase
2324

@@ -440,6 +441,19 @@ - (void)testNull {
440441
};
441442
MJUser *testNull = [MJUser mj_objectWithKeyValues:dic];
442443
MJExtensionLog(@"%@", testNull);
444+
445+
446+
NSDictionary *catDict = @{
447+
@"name": @"Tom",
448+
@"address": [NSNull null],
449+
@"nicknames": @[
450+
@"Jerry's Heart",
451+
[NSNull null],
452+
@"Cowboy Tom",
453+
]
454+
};
455+
MJCat *cat = [MJCat mj_objectWithKeyValues:catDict];
456+
MJExtensionLog(@"%@", cat);
443457
}
444458

445459
#pragma mark NSCoding示例
@@ -478,6 +492,7 @@ - (void)testReplacedKeyFromPropertyName121 {
478492

479493
#pragma mark 过滤字典的值(比如字符串日期处理为NSDate、字符串nil处理为@"")
480494
- (void)testNewValueFromOldValue {
495+
// JSON -> Object
481496
// 1.定义一个字典
482497
NSDictionary *dict = @{
483498
@"name" : @"5分钟突破iOS开发",
@@ -492,6 +507,12 @@ - (void)testNewValueFromOldValue {
492507
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
493508
fmt.dateFormat = @"yyyy-MM-dd";
494509
XCTAssert([[fmt stringFromDate:book.publishedTime] isEqual:@"2011-09-10"]);
510+
511+
//Object -> JSON
512+
NSDictionary *bookDict = [book mj_keyValues];
513+
514+
XCTAssert([bookDict[@"name"] isEqualToString:@"5分钟突破iOS开发"]);
515+
XCTAssert([bookDict[@"publishedTime"] isEqualToString:@"2011-09-10"]);
495516
}
496517

497518
#pragma mark 使用MJExtensionLog打印模型的所有属性

MJExtensionTests/Model/MJBook.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,11 @@ @implementation MJBook
2222
//
2323
// return oldValue;
2424
//}
25+
26+
- (void)mj_objectDidConvertToKeyValues:(NSMutableDictionary *)keyValues {
27+
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
28+
fmt.dateFormat = @"yyy-MM-dd";
29+
// should use sharedFormatter for better performance
30+
keyValues[@"publishedTime"] = [fmt stringFromDate:self.publishedTime];
31+
}
2532
@end

MJExtensionTests/Model/MJCat.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//
2+
// MJCat.h
3+
// MJExtensionTests
4+
//
5+
// Created by Frank on 2020/6/9.
6+
// Copyright © 2020 MJ Lee. All rights reserved.
7+
//
8+
9+
#import <Foundation/Foundation.h>
10+
11+
NS_ASSUME_NONNULL_BEGIN
12+
13+
@interface MJCat : NSObject <MJKeyValue>
14+
15+
@property (nonatomic, copy, nullable) NSString *name;
16+
@property (nonatomic, copy, nullable) NSArray<NSString *> *nicknames;
17+
@property (nonatomic, copy, nullable) NSString *address;
18+
19+
@end
20+
21+
NS_ASSUME_NONNULL_END

MJExtensionTests/Model/MJCat.m

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//
2+
// MJCat.m
3+
// MJExtensionTests
4+
//
5+
// Created by Frank on 2020/6/9.
6+
// Copyright © 2020 MJ Lee. All rights reserved.
7+
//
8+
9+
#import "MJCat.h"
10+
11+
@implementation MJCat
12+
13+
+ (NSDictionary *)mj_objectClassInArray {
14+
return @{
15+
@"nicknames" : NSString.class
16+
};
17+
}
18+
19+
@end

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ MJExtension
4242
* [Coding](#Coding)
4343
* [Camel -> underline](#Camel_underline)
4444
* [NSString -> NSDate, nil -> @""](#NSString_NSDate)
45+
* [NSDate -> NSString](#NSDate -> NSString)
4546
* [More use cases](#More_use_cases)
4647

4748
---
@@ -550,7 +551,23 @@ Book *book = [Book mj_objectWithKeyValues:dict];
550551
NSLog(@"name=%@, publisher=%@, publishedTime=%@", book.name, book.publisher, book.publishedTime);
551552
```
552553
554+
### NSDate -> NSString
555+
556+
**模型转字典时, 修改 Date 类型至 String**
557+
558+
```objc
559+
- (void)mj_objectDidConvertToKeyValues:(NSMutableDictionary *)keyValues {
560+
// NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
561+
// formatter.dateFormat = @"yyy-MM-dd";
562+
// should use sharedFormatter for better performance
563+
keyValues[@"publishedTime"] = [sharedFormatter stringFromDate:self.publishedTime];
564+
}
565+
```
566+
567+
568+
553569
### <a id="More_use_cases"></a> More use cases【更多用法】
570+
554571
- Please reference to `NSObject+MJKeyValue.h` and `NSObject+MJCoding.h`
555572

556573

0 commit comments

Comments
 (0)